The standard C++17
include a new namespace pmr
including a set of classes grouped under the name of memory_resource
.
After a search on internet, I found very few vulgarized information about it, the direct consequence is this question:
What are the main ideas behind pmr
and especially pmr::memory_resource
?
Detailing a bit more the question, some of the question marks in my head are:
allocator
?allocator
provided to a container constructor? (e.g. for testing purpose)Related questions:
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 a memory_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
.