std::pmr::polymorphic_allocator
<memory_resource>
class polymorphic_allocator;
(until C++20)
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.
For non-polymorphic allocators, similar propagation can be achieved with the help of std::scoped_allocator_adaptor .
Contents
[edit] Member types
value_type
T
[edit] Member functions
Public member functions
(public member function) [edit]
polymorphic_allocator
for use by a container's copy constructor (public member function) [edit]
[edit] Non-member functions
[edit] 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 | Value | Std | Feature |
---|---|---|---|
__cpp_lib_polymorphic_allocator |
201902L |
(C++20) | std::pmr::polymorphic_allocator<> as a vocabulary type
|