< cpp‎ | memory
Revision as of 16:34, 2 November 2012 by P12bot (Talk | contribs)


Template:ddcl list begin <tr class="t-dsc-header">

Defined in header <scoped_allocator>

<td></td> <td></td> <tr class="t-dcl-sep"><td></td><td></td><td></td></tr>

<tr class="t-dcl ">

<td >
template< class OuterAlloc, class... InnerAlloc >
class scoped_allocator_adaptor : public OuterAlloc;

<td class="t-dcl-nopad"> </td> <td > (since C++11) </td> </tr> Template:ddcl list end

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 elements 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 allocators, the last inner allocator is reused for all further nested containers.

For the purpose of scoped_allocator_adaptor, if the next inner allocator is A, any class T for which std::uses_allocator<T,A>::value == true participates 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::construct.

Typical implementation holds an instance of a std::scoped_allocator_adaptor<InnerAllocs...> as a member object.


Member types

Type Definition
outer_allocator_type OuterAlloc
inner_allocator_type scoped_allocator_adaptor<InnerAllocs...> or, if sizeof...(InnerAllocs) == 0, scoped_allocator_adaptor<OuterAlloc>
value_type std::allocator_traits<OuterAlloc>::value_type
size_type std::allocator_traits<OuterAlloc>::size_type
difference_type std::allocator_traits<OuterAlloc>::difference_type
pointer std::allocator_traits<OuterAlloc>::pointer
const_pointer std::allocator_traits<OuterAlloc>::const_pointer
void_pointer std::allocator_traits<OuterAlloc>::void_pointer
const_void_pointer std::allocator_traits<OuterAlloc>::const_void_pointer
std::true_type if std::allocator_traits<A>::propagate_on_container_copy_assignment::value is true for at least one allocator A among OuterAlloc and InnerAlloc...
std::true_type if std::allocator_traits<A>::propagate_on_container_move_assignment::value is true for at least one allocator A among OuterAlloc and InnerAlloc...
std::true_type if std::allocator_traits<A>::propagate_on_container_swap::value is true for at least one allocator A among OuterAlloc and InnerAlloc...
template< class T >
struct rebind {
    typedef scoped_allocator_adaptor<
        std::allocator_traits<OuterAlloc>::template rebind_alloc<T>, 
    > other;

Member functions

Template:cpp/memory/scoped allocator adaptor/dcl list scoped allocator adaptorTemplate:cpp/memory/scoped allocator adaptor/dcl list ~scoped allocator adaptorTemplate:cpp/memory/scoped allocator adaptor/dcl list inner allocatorTemplate:cpp/memory/scoped allocator adaptor/dcl list outer allocatorTemplate:cpp/memory/scoped allocator adaptor/dcl list allocateTemplate:cpp/memory/scoped allocator adaptor/dcl list deallocateTemplate:cpp/memory/scoped allocator adaptor/dcl list max sizeTemplate:cpp/memory/scoped allocator adaptor/dcl list constructTemplate:cpp/memory/scoped allocator adaptor/dcl list destroyTemplate:cpp/memory/scoped allocator adaptor/dcl list select on container copy construction

Non-member functions

Template:cpp/memory/scoped allocator adaptor/dcl list operator cmp

See also

Template:cpp/memory/dcl list allocator traitsTemplate:cpp/memory/dcl list uses allocatorTemplate:cpp/memory/dcl list allocator