Skip to main content

std::pmr::polymorphic_allocator

Defined inmemory_resource
Since C++20
template< class T = std::byte >
class polymorphic_allocator;
Since C++17, Until C++17
template< class T >
class polymorphic_allocator;

The class template std::pmr::polymorphic_allocator is an Allocator which exhibits different allocation behavior depending upon the std::pmr::memory_resource from which it is constructed. Since memory_resource uses runtime polymorphism to manage allocations, different container instances with polymorphic_allocator as their static allocator type are interoperable, but can behave as if they had different allocator types.

All specializations of polymorphic_allocator meet the Allocator completeness requirements.

The polymorphic_allocator::construct member function does uses-allocator construction, so that the elements of a container using a polymorphic_allocator will use that same allocator for their own allocations. For example, a std::pmr::vector<std::pmr::string> will use the same memory_resource for the vector's storage and each string's storage.

Member types

pubMember TypeDefinition
pubvalue_typeT

Member functions

pub(constructor)Constructs a polymorphic_allocator
pub(destructor)(implicitly declared)Implicitly declared destructor
puboperator= (deleted)Copy assignment operator is deleted
puballocateAllocate memory
pubdeallocateDeallocate memory
pubconstructConstructs an object in allocated storage
pubdestroy (deprecated in C++20)Destroys an object in allocated storage
puballocate_bytes(C++20)Allocate raw aligned memory from the underlying resource
pubdeallocate_bytes(C++20)Free raw memory obtained from allocate_bytes
puballocate_object(C++20)Allocates raw memory suitable for an object or an array
pubdeallocate_object(C++20)Frees raw memory obtained by allocate_object
pubnew_object(C++20)Allocates and constructs an object
pubdelete_object(C++20)Destroys and deallocates an object
pubselect_on_container_copy_constructionCreate a new polymorphic_allocator for use by a container's copy constructor
pubresourceReturns a pointer to the underlying memory resource

Non-member functions

puboperator==
operator!= (removed in C++20)
compare two polymorphic_allocators

Notes

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.

Feature-test macro
__cpp_lib_polymorphic_allocator

std::pmr::polymorphic_allocator

Defined inmemory_resource
Since C++20
template< class T = std::byte >
class polymorphic_allocator;
Since C++17, Until C++17
template< class T >
class polymorphic_allocator;

The class template std::pmr::polymorphic_allocator is an Allocator which exhibits different allocation behavior depending upon the std::pmr::memory_resource from which it is constructed. Since memory_resource uses runtime polymorphism to manage allocations, different container instances with polymorphic_allocator as their static allocator type are interoperable, but can behave as if they had different allocator types.

All specializations of polymorphic_allocator meet the Allocator completeness requirements.

The polymorphic_allocator::construct member function does uses-allocator construction, so that the elements of a container using a polymorphic_allocator will use that same allocator for their own allocations. For example, a std::pmr::vector<std::pmr::string> will use the same memory_resource for the vector's storage and each string's storage.

Member types

pubMember TypeDefinition
pubvalue_typeT

Member functions

pub(constructor)Constructs a polymorphic_allocator
pub(destructor)(implicitly declared)Implicitly declared destructor
puboperator= (deleted)Copy assignment operator is deleted
puballocateAllocate memory
pubdeallocateDeallocate memory
pubconstructConstructs an object in allocated storage
pubdestroy (deprecated in C++20)Destroys an object in allocated storage
puballocate_bytes(C++20)Allocate raw aligned memory from the underlying resource
pubdeallocate_bytes(C++20)Free raw memory obtained from allocate_bytes
puballocate_object(C++20)Allocates raw memory suitable for an object or an array
pubdeallocate_object(C++20)Frees raw memory obtained by allocate_object
pubnew_object(C++20)Allocates and constructs an object
pubdelete_object(C++20)Destroys and deallocates an object
pubselect_on_container_copy_constructionCreate a new polymorphic_allocator for use by a container's copy constructor
pubresourceReturns a pointer to the underlying memory resource

Non-member functions

puboperator==
operator!= (removed in C++20)
compare two polymorphic_allocators

Notes

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.

Feature-test macro
__cpp_lib_polymorphic_allocator