std::allocator_traits
From cppreference.com
| Defined in header <memory>
|
||
| template< class Alloc > struct allocator_traits; |
(since C++11) | |
The allocator_traits class template provides the standardized way to access various properties of Allocators. The standard containers and other standard library components access allocators through this template.
|
It is possible to use any class type as an allocator, as long as the user-provided specialization of |
(until C++23) |
|
A program that declares an explicit or partial specialization of |
(since C++23) |
The default, non-specialized, std::allocator_traits contains the following members:
Contents |
[edit] Member types
| Type | Definition |
allocator_type
|
Alloc
|
value_type
|
Alloc::value_type
|
pointer
|
Alloc::pointer if present, otherwise value_type*
|
const_pointer
|
Alloc::const_pointer if present, otherwise std::pointer_traits<pointer>::rebind<const value_type>
|
void_pointer
|
Alloc::void_pointer if present, otherwise std::pointer_traits<pointer>::rebind<void>
|
const_void_pointer
|
Alloc::const_void_pointer if present, otherwise std::pointer_traits<pointer>::rebind<const void>
|
difference_type
|
Alloc::difference_type if present, otherwise std::pointer_traits<pointer>::difference_type
|
size_type
|
Alloc::size_type if present, otherwise std::make_unsigned<difference_type>::type
|
propagate_on_container_copy_assignment
|
Alloc::propagate_on_container_copy_assignment if present, otherwise std::false_type
|
propagate_on_container_move_assignment
|
Alloc::propagate_on_container_move_assignment if present, otherwise std::false_type
|
propagate_on_container_swap
|
Alloc::propagate_on_container_swap if present, otherwise std::false_type
|
is_always_equal
|
Alloc::is_always_equal if present, otherwise std::is_empty<Alloc>::type
|
[edit] Member alias templates
| Type | Definition |
rebind_alloc<T>
|
Alloc::rebind<T>::other if present, otherwise SomeAllocator<T, Args> if this Alloc is of the form SomeAllocator<U, Args>, where Args is zero or more type arguments
|
rebind_traits<T>
|
std::allocator_traits<rebind_alloc<T>> |
[edit] Member functions
| [static] |
allocates uninitialized storage using the allocator (public static member function) |
| [static] (C++23) |
allocates storage at least as large as the requested size via an allocator (public static member function) |
| [static] |
deallocates storage using the allocator (public static member function) |
| [static] |
constructs an object in the allocated storage (function template) |
| [static] |
destructs an object stored in the allocated storage (function template) |
| [static] |
returns the maximum object size supported by the allocator (public static member function) |
| obtains the allocator to use after copying a standard container (public static member function) |
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2108 | C++11 | there was no way to show an allocator is stateless | is_always_equal provided
|
[edit] See also
| (C++11) |
container using allocator; associated traits (e.g. propagate_on_container_swap) usage(named requirement) |
| the default allocator (class template) | |
| (C++11) |
implements multi-level allocator for multi-level containers (class template) |
| (C++11) |
provides information about pointer-like types (class template) |