std:: allocator_traits

From cppreference.com
Dynamic memory management
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Allocators
allocator_traits
(C++11)
Garbage collection support
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)



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 Allocator s . The standard containers and other standard library components access allocators through this template, which makes it possible to use any class type as an allocator, as long as the user-provided specialization of std::allocator_traits implements all required functionality.

A program that declares an explicit or partial specialization of std::allocator_traits is ill-formed, no diagnostic required.

(since C++23)

The default, non-specialized, std::allocator_traits contains the following members:

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

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 >>

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)

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

See also

container using allocator; associated traits (e.g. propagate_on_container_swap ) usage
(named requirement)
the default allocator
(class template)
implements multi-level allocator for multi-level containers
(class template)
provides information about pointer-like types
(class template)