FreeBSD Manual Pages
std::scoped...ator_adaptor(3) C++ Standard Libarystd::scoped...ator_adaptor(3) NAME std::scoped_allocator_adaptor - std::scoped_allocator_adaptor Synopsis Defined in header <scoped_allocator> template< class OuterAlloc, class... InnerAlloc > (since C++11) class scoped_allocator_adaptor : public OuterAlloc; The std::scoped_allocator_adaptor class template is an allocator which can be used with multilevel containers (vector of sets of lists of tuples of maps, etc). It is instantiated with one outer allocator type OuterAlloc and zero or more inner allocator types InnerAlloc.... A container constructed directly with a scoped_allocator_adaptor uses OuterAlloc to allocate its elements, but if an element is itself a container, it uses the first inner allocator. The ele- ments of that container, if they are themselves containers, use the second inner allocator, etc. If there are more levels to the container than there are inner allo- cators, the last inner allocator is reused for all further nested containers. The purpose of this adaptor is to correctly initialize stateful al- locators in nested containers, such as when all levels of a nested container must be placed in the same shared memory segment. The adaptor's constructor takes the arguments for all allocators in the list, and each nested container obtains its allo- cator's state from the adaptor as needed. For the purpose of scoped_allocator_adaptor, if the next inner allo- cator is A, any class T for which std::uses_allocator<T,A>::value == true partici- pates in the recursion as if it was a container. Additionally, std::pair is treated as such a container by specific overloads of scoped_allocator_adaptor::con- struct. Typical implementation holds an instance of a std::scoped_allocator_adaptor<InnerAllocs...> as a member object. Member types Type Definition outer_allocator_type OuterAlloc scoped_allocator_adaptor<InnerAllocs...> or, if inner_allocator_type sizeof...(InnerAllocs) == 0, scoped_allocator_adaptor<OuterAlloc> value_type std::allocator_traits<OuterAl- loc>::value_type size_type std::allocator_traits<OuterAl- loc>::size_type difference_type std::allocator_traits<OuterAlloc>::differ- ence_type pointer std::allocator_traits<OuterAlloc>::pointer const_pointer std::allocator_traits<OuterAl- loc>::const_pointer void_pointer std::allocator_traits<OuterAl- loc>::void_pointer const_void_pointer std::allocator_traits<OuterAl- loc>::const_void_pointer propagate_on_container_copy_assignment std::true_type if std::allocator_traits<A>::propagate_on_container_copy_as- signment::value is true for at least one allocator A among OuterAlloc and InnerAlloc... propagate_on_container_move_assignment std::true_type if std::allocator_traits<A>::propagate_on_container_move_as- signment::value is true for at least one allocator A among OuterAlloc and InnerAlloc... propagate_on_container_swap std::true_type if std::allocator_traits<A>::propagate_on_con- tainer_swap::value is true for at least one allocator A among OuterAlloc and InnerAl- loc... is_always_equal std::true_type if std::allocator_traits<A>::is_al- ways_equal::value is true for every allocator A among OuterAlloc and InnerAl- loc... rebind template< class T > struct rebind { typedef scoped_allocator_adaptor< std::allocator_traits<OuterAlloc>::template rebind_alloc<T>, InnerAllocs... > other; }; Member functions creates a new scoped_alloca- tor_adaptor constructor instance (public member function) destructor destructs a scoped_alloca- tor_adaptor instance (public member function) operator= assigns a scoped_alloca- tor_adaptor (public member function) inner_allocator obtains an inner_allocator reference (public member function) outer_allocator obtains an outer_allocator reference (public member function) allocates uninitialized stor- age using the allocate outer allocator (public member function) deallocate deallocates storage using the outer allocator (public member function) returns the largest allocation size supported max_size by the outer allocator (public member function) constructs an object in allo- cated storage, construct passing the inner allocator to its constructor if appropriate (public member function) destroy destructs an object in allo- cated storage (public member function) copies the state of scoped_al- locator_adaptor select_on_container_copy_construction and all its allocators (public member function) Non-member functions operator== compares two scoped_allocator_adaptor instances operator!= (function template) (removed in C++20) Deduction guides(since C++17) Example // Run this code #include <vector> #include <scoped_allocator> #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/allocators/adaptive_pool.hpp> namespace bi = boost::interprocess; template<class T> using alloc = bi::adaptive_pool<T, bi::managed_shared_memory::seg- ment_manager>; using ipc_row = std::vector<int, alloc<int>>; using ipc_matrix = std::vector<ipc_row, std::scoped_allocator_adap- tor<alloc<ipc_row>>>; int main () { bi::managed_shared_memory s(bi::create_only, "Demo", 65536); // create vector of vectors in shared memory ipc_matrix v(s.get_segment_manager()); // for all these additions, the inner vectors obtain their alloca- tor arguments // from the outer vector's scoped_allocator_adaptor v.resize(1); v[0].push_back(1); v.emplace_back(2); std::vector<int> local_row = {1,2,3}; v.emplace_back(local_row.begin(), local_row.end()); bi::shared_memory_object::remove("Demo"); } Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior LWG 2108 C++11 there was no way to show if is_always_equal scoped_allocator_adaptor is stateless provided See also allocator_traits provides information about allocator types (C++11) (class template) uses_allocator checks if the specified type supports uses-alloca- tor construction (C++11) (class template) allocator the default allocator (class template) http://cppreference.com 2022.07.31 std::scoped...ator_adaptor(3)
NAME | Synopsis | Member types | Member functions | Non-member functions | Example | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::scoped_allocator_adaptor&sektion=3&manpath=FreeBSD+Ports+15.0>
