A polymorphic_allocator
is intended to let you have an allocator whose behavior is dynamically determined at runtime.
The only way to create a polymorphic_allocator
is:
-
Default constructed, in which case it uses
std::pmr::get_default_resource()
return value, which is amemory_resource*
. -
Pass it a
memory_resource*
. -
copy from another
polymorphic_allocator
.
So the point of customization for a polymorphic_allocator
is creating a class that inherits from memory_resource
and implementing its methods, or using one of the pre-declared memory_resource
s that are defined in std::pmr
: (un
)synchronized_pool_resource
and monotonic_buffer_resource
as types, or std::pmr::new_delete_resource()
/ std::pmr::null_memory_resource()
.
Suppose you want a your memory to be allocated using a strategy different than the 5 provided in std::pmr
. Then you make a class that inherits from std::pmr::memory_resource
, and pass it to a container which uses a polymorphic_allocator
.