< cpp‎ | memory
Dynamic memory management
Uninitialized storage
Garbage collection support
C Library
Low level memory management
template< class T >
class polymorphic_allocator;
(since C++17)
(until C++20)
template< class T = std::byte >
class polymorphic_allocator;
(since C++20)

The class template std::pmr::polymorphic_allocator is an Allocator whose allocation behavior depends on the memory resource it is constructed with. Thus, different instances of polymorphic_allocator can exhibit entirely different allocation behavior. This runtime polymorphism allows objects using polymorphic_allocator to behave as if they used different allocator types at run time despite the identical static allocator type.

All specializations of polymorphic_allocator meet the Allocator completeness requirements.

Member types

Member type definition
value_type T

Member functions

Constructs a polymorphic_allocator
(public member function)
(implicitly declared)
Implicitly declared destructor
(public member function)
Copy assignment operator is deleted
(public member function)
Public member functions
Allocate memory
(public member function)
Deallocate memory
(public member function)
Constructs an object in allocated storage
(public member function)
Destroys an object in allocated storage
(public member function)
Allocate raw aligned memory from the underlying resource
(public member function)
Free raw memory obtained from allocate_bytes
(public member function)
Allocates raw memory suitable for an object or an array
(public member function)
Frees raw memory obtained by allocate_object
(public member function)
Allocates and constructs an object
(public member function)
Destroys and deallocates an object
(public member function)
Create a new polymorphic_allocator for use by a container's copy constructor
(public member function)
Returns a pointer to the underlying memory resource
(public member function)

Non-member functions

compare two polymorphic_allocators


polymorphic_allocator does not propagate on container copy assignment, move assignment, or swap. As a result, move assignment of a polymorphic_allocator-using container can throw, and swapping two polymorphic_allocator-using containers whose allocators do not compare equal results in undefined behavior.

See also

an abstract interface for classes that encapsulate memory resources