std::pmr::polymorphic_allocator
Defined in | memory_resource |
template< class T = std::byte >
class polymorphic_allocator;
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
pub | Member Type | Definition |
pub | value_type | T |
Member functions
pub | (constructor) | Constructs a polymorphic_allocator |
pub | (destructor)(implicitly declared) | Implicitly declared destructor |
pub | operator= (deleted) | Copy assignment operator is deleted |
pub | allocate | Allocate memory |
pub | deallocate | Deallocate memory |
pub | construct | Constructs an object in allocated storage |
pub | destroy (deprecated in C++20) | Destroys an object in allocated storage |
pub | allocate_bytes(C++20) | Allocate raw aligned memory from the underlying resource |
pub | deallocate_bytes(C++20) | Free raw memory obtained from allocate_bytes |
pub | allocate_object(C++20) | Allocates raw memory suitable for an object or an array |
pub | deallocate_object(C++20) | Frees raw memory obtained by allocate_object |
pub | new_object(C++20) | Allocates and constructs an object |
pub | delete_object(C++20) | Destroys and deallocates an object |
pub | select_on_container_copy_construction | Create a new polymorphic_allocator for use by a container's copy constructor |
pub | resource | Returns a pointer to the underlying memory resource |
Non-member functions
pub | operator== 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 |