Standard library header <memory_resource> (C++17)

From cppreference.com

Classes

Defined in namespace std::pmr

polymorphic_allocator

(C++17)

an allocator that supports run-time polymorphism based on the

std::pmr::memory_resource

it is constructed with
(class template)

[edit]

memory_resource

(C++17)

an abstract interface for classes that encapsulate memory resources
(class)

[edit]

pool_options

(C++17)

a set of constructor options for pool resources
(class)

[edit]

synchronized_pool_resource

(C++17)

a thread-safe

std::pmr::memory_resource

for managing allocations in pools of different block sizes
(class)

[edit]

unsynchronized_pool_resource

(C++17)

a thread-unsafe

std::pmr::memory_resource

for managing allocations in pools of different block sizes
(class)

[edit]

monotonic_buffer_resource

(C++17)

a special-purpose

std::pmr::memory_resource

that releases the allocated memory only when the resource is destroyed
(class)

[edit]

Functions

Defined in namespace std::pmr

new_delete_resource

(C++17)

returns a static program-wide

std::pmr::memory_resource

that uses the global

operator new

and

operator delete

to allocate and deallocate memory
(function)

[edit]

null_memory_resource

(C++17)

returns a static

std::pmr::memory_resource

that performs no allocation
(function)

[edit]

get_default_resource

(C++17)

gets the default

std::pmr::memory_resource

(function)

[edit]

set_default_resource

(C++17)

sets the default

std::pmr::memory_resource

(function)

[edit]

Synopsis

namespacestd::pmr{// class memory_resourceclassmemory_resource;booloperator==(constmemory_resource&a,constmemory_resource&b)noexcept;// class template polymorphic_allocatortemplate<classTp>classpolymorphic_allocator;template<classT1,classT2>booloperator==(constpolymorphic_allocator<T1>&a,constpolymorphic_allocator<T2>&b)noexcept;// global memory resourcesmemory_resource*new_delete_resource()noexcept;memory_resource*null_memory_resource()noexcept;memory_resource*set_default_resource(memory_resource*r)noexcept;memory_resource*get_default_resource()noexcept;// pool resource classesstructpool_options;classsynchronized_pool_resource;classunsynchronized_pool_resource;classmonotonic_buffer_resource;}Class

std::pmr::memory_resource

namespacestd::pmr{classmemory_resource{staticconstexprsize_tmax_align=alignof(max_align_t);// exposition onlypublic:memory_resource()=default;memory_resource(constmemory_resource&)=default;virtual~memory_resource();memory_resource&operator=(constmemory_resource&)=default;void*allocate(size_tbytes,size_talignment=max_align);voiddeallocate(void*p,size_tbytes,size_talignment=max_align);boolis_equal(constmemory_resource&other)constnoexcept;private:virtualvoid*do_allocate(size_tbytes,size_talignment)=0;virtualvoiddo_deallocate(void*p,size_tbytes,size_talignment)=0;virtualbooldo_is_equal(constmemory_resource&other)constnoexcept=0;};}Class template

std::pmr::polymorphic_allocator

namespacestd::pmr{template<classTp=byte>classpolymorphic_allocator{memory_resource*memory_rsrc;// exposition onlypublic:usingvalue_type=Tp;// constructorspolymorphic_allocator()noexcept;polymorphic_allocator(memory_resource*r);polymorphic_allocator(constpolymorphic_allocator&other)=default;template<classU>polymorphic_allocator(constpolymorphic_allocator<U>&other)noexcept;polymorphic_allocator&operator=(constpolymorphic_allocator&)=delete;// member functionsTp*allocate(size_tn);voiddeallocate(Tp*p,size_tn);void*allocate_bytes(size_tnbytes,size_talignment=alignof(max_align_t));voiddeallocate_bytes(void*p,size_tnbytes,size_talignment=alignof(max_align_t));template<classT>T*allocate_object(size_tn=1);template<classT>voiddeallocate_object(T*p,size_tn=1);template<classT,class...CtorArgs>T*new_object(CtorArgs&&...ctor_args);template<classT>voiddelete_object(T*p);template<classT,class...Args>voidconstruct(T*p,Args&&...args);template<classT>voiddestroy(T*p);// deprecatedpolymorphic_allocatorselect_on_container_copy_construction()const;memory_resource*resource()const;};}Class

std::pmr::pool_options

namespacestd::pmr{structpool_options{size_tmax_blocks_per_chunk=0;size_tlargest_required_pool_block=0;};}Class

std::pmr::synchronized_pool_resource

namespacestd::pmr{classsynchronized_pool_resource:publicmemory_resource{public:synchronized_pool_resource(constpool_options&opts,memory_resource*upstream);synchronized_pool_resource():synchronized_pool_resource(pool_options(),get_default_resource()){}explicitsynchronized_pool_resource(memory_resource*upstream):synchronized_pool_resource(pool_options(),upstream){}explicitsynchronized_pool_resource(constpool_options&opts):synchronized_pool_resource(opts,get_default_resource()){}synchronized_pool_resource(constsynchronized_pool_resource&)=delete;virtual~synchronized_pool_resource();synchronized_pool_resource&operator=(constsynchronized_pool_resource&)=delete;voidrelease();memory_resource*upstream_resource()const;pool_optionsoptions()const;protected:void*do_allocate(size_tbytes,size_talignment)override;voiddo_deallocate(void*p,size_tbytes,size_talignment)override;booldo_is_equal(constmemory_resource&other)constnoexceptoverride;};}Class

std::pmr::unsynchronized_pool_resource

namespacestd::pmr{classunsynchronized_pool_resource:publicmemory_resource{public:unsynchronized_pool_resource(constpool_options&opts,memory_resource*upstream);unsynchronized_pool_resource():unsynchronized_pool_resource(pool_options(),get_default_resource()){}explicitunsynchronized_pool_resource(memory_resource*upstream):unsynchronized_pool_resource(pool_options(),upstream){}explicitunsynchronized_pool_resource(constpool_options&opts):unsynchronized_pool_resource(opts,get_default_resource()){}unsynchronized_pool_resource(constunsynchronized_pool_resource&)=delete;virtual~unsynchronized_pool_resource();unsynchronized_pool_resource&operator=(constunsynchronized_pool_resource&)=delete;voidrelease();memory_resource*upstream_resource()const;pool_optionsoptions()const;protected:void*do_allocate(size_tbytes,size_talignment)override;voiddo_deallocate(void*p,size_tbytes,size_talignment)override;booldo_is_equal(constmemory_resource&other)constnoexceptoverride;};}Class

std::pmr::monotonic_buffer_resource

namespacestd::pmr{classmonotonic_buffer_resource:publicmemory_resource{memory_resource*upstream_rsrc;// exposition onlyvoid*current_buffer;// exposition onlysize_tnext_buffer_size;// exposition onlypublic:explicitmonotonic_buffer_resource(memory_resource*upstream);monotonic_buffer_resource(size_tinitial_size,memory_resource*upstream);monotonic_buffer_resource(void*buffer,size_tbuffer_size,memory_resource*upstream);monotonic_buffer_resource():monotonic_buffer_resource(get_default_resource()){}explicitmonotonic_buffer_resource(size_tinitial_size):monotonic_buffer_resource(initial_size,get_default_resource()){}monotonic_buffer_resource(void*buffer,size_tbuffer_size):monotonic_buffer_resource(buffer,buffer_size,get_default_resource()){}monotonic_buffer_resource(constmonotonic_buffer_resource&)=delete;virtual~monotonic_buffer_resource();monotonic_buffer_resource&operator=(constmonotonic_buffer_resource&)=delete;voidrelease();memory_resource*upstream_resource()const;protected:void*do_allocate(size_tbytes,size_talignment)override;voiddo_deallocate(void*p,size_tbytes,size_talignment)override;booldo_is_equal(constmemory_resource&other)constnoexceptoverride;};}