Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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)

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>

home | help