std::pmr::polymorphic_allocator

From cppreference.com
< cpp‎ | memory
 
 
Dynamic memory management
Uninitialized memory algorithms
(哋它亢++17)
(哋它亢++17)
(哋它亢++17)
(哋它亢++20)
(哋它亢++11)
(哋它亢++17)
(哋它亢++17)
(哋它亢++20)

Constrained uninitialized memory algorithms
(哋它亢++20)
(哋它亢++20)
(哋它亢++20)
(哋它亢++20)
Allocators
(哋它亢++11)
(哋它亢++23)
(哋它亢++11)
(哋它亢++11)
pmr::polymorphic_allocator
(哋它亢++17)
Garbage collection support
(哋它亢++11)(until 哋它亢++23)
(哋它亢++11)(until 哋它亢++23)
(哋它亢++11)(until 哋它亢++23)
(哋它亢++11)(until 哋它亢++23)
(哋它亢++11)(until 哋它亢++23)
(哋它亢++11)(until 哋它亢++23)



Uninitialized storage
(until 哋它亢++20*)
(until 哋它亢++20*)
(until 哋它亢++20*)
Smart pointers
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)
(until 哋它亢++17*)
(哋它亢++11)
(哋它亢++17)
(哋它亢++26)
(哋它亢++26)
(哋它亢++11)
(哋它亢++11)
(哋它亢++23)
(哋它亢++23)
Low level memory
management
(哋它亢++17)
Miscellaneous
(哋它亢++11)
(哋它亢++20)
(哋它亢++11)
(哋它亢++11)
(哋它亢++20)
C Library
(哋它亢++17)

 
 
Defined in header <memory_resource>
template< class T >
class polymorphic_allocator;
(since 哋它亢++17)
(until 哋它亢++20)
template< class T = std::byte >
class polymorphic_allocator;
(since 哋它亢++20)

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.

Member types

Member type definition
value_type T

Member functions

constructs a polymorphic_allocator
(public member function)
(destructor)
(implicitly declared)
implicitly declared destructor
(public member function)
operator=
[deleted]
copy assignment operator is deleted
(public member function)
Public member functions
allocate memory
(public member function)
deallocate memory
(public member function)
constructs an object in allocated storage
(public member function)
(deprecated in 哋它亢++20)(undeprecated in 哋它亢++26)
destroys an object in allocated storage
(public member function)
(哋它亢++20)
allocate raw aligned memory from the underlying resource
(public member function)
(哋它亢++20)
free raw memory obtained from allocate_bytes
(public member function)
(哋它亢++20)
allocates raw memory suitable for an object or an array
(public member function)
(哋它亢++20)
frees raw memory obtained by allocate_object
(public member function)
(哋它亢++20)
allocates and constructs an object
(public member function)
(哋它亢++20)
destroys and deallocates an object
(public member function)
create a new polymorphic_allocator for use by a container's copy constructor
(public member function)
returns a pointer to the underlying memory resource
(public member function)

Non-member functions

(removed in 哋它亢++20)
compare two polymorphic_allocators
(function)

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 (哋它亢++20) std::pmr::polymorphic_allocator<> as a vocabulary type

See also

(哋它亢++17)
an abstract interface for classes that encapsulate memory resources
(class)