|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
(C++20/26*) | ||||
| Non-member functions | ||||
(until C++20) |
Defined in header <memory_resource> | ||
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 templatestd::pmr::polymorphic_allocator is anAllocator which exhibits different allocation behavior depending upon thestd::pmr::memory_resource from which it is constructed. Sincememory_resource uses runtime polymorphism to manage allocations, different container instances withpolymorphic_allocator as their static allocator type are interoperable, but can behave as if they had different allocator types.
All specializations ofpolymorphic_allocator meet theallocator completeness requirements.
Thepolymorphic_allocator::construct member function doesuses-allocator construction, so that the elements of a container using apolymorphic_allocator will use that same allocator for their own allocations. For example, astd::pmr::vector<std::pmr::string> will use the samememory_resource for thevector's storage and eachstring's storage.
For non-polymorphic allocators, similar propagation can be achieved with the help ofstd::scoped_allocator_adaptor.
Contents |
| Member type | definition |
value_type | T |
constructs apolymorphic_allocator(public member function)[edit] | |
(destructor) (implicitly declared) | implicitly declared destructor (public member function)[edit] |
operator= [deleted] | copy assignment operator is deleted (public member function)[edit] |
Public member functions | |
| allocate memory (public member function)[edit] | |
| deallocate memory (public member function)[edit] | |
| constructs an object in allocated storage (public member function)[edit] | |
(deprecated in C++20)(undeprecated in C++26) | destroys an object in allocated storage (public member function)[edit] |
(C++20) | allocate raw aligned memory from the underlying resource (public member function)[edit] |
(C++20) | free raw memory obtained fromallocate_bytes(public member function)[edit] |
(C++20) | allocates raw memory suitable for an object or an array (public member function)[edit] |
(C++20) | frees raw memory obtained byallocate_object(public member function)[edit] |
(C++20) | allocates and constructs an object (public member function)[edit] |
(C++20) | destroys and deallocates an object (public member function)[edit] |
create a newpolymorphic_allocator for use by a container's copy constructor(public member function)[edit] | |
| returns a pointer to the underlying memory resource (public member function)[edit] | |
(removed in C++20) | compare twopolymorphic_allocators(function)[edit] |
polymorphic_allocator does not propagate on container copy assignment, move assignment, or swap. As a result, move assignment of apolymorphic_allocator-using container can throw, and swapping twopolymorphic_allocator-using containers whose allocators do not compare equal results in undefined behavior.
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_polymorphic_allocator | 201902L | (C++20) | std::pmr::polymorphic_allocator<> as a vocabulary type |
(C++17) | an abstract interface for classes that encapsulate memory resources (class)[edit] |