std::pmr::polymorphic_allocator - cppreference.com (original) (raw)

std::pmr::polymorphic_allocator

| Defined in header <memory_resource> | | | | -------------------------------------------------------------------------------------------------------------------------------------- | | --------------------------- | | template< class T > class polymorphic_allocator; | | (since C++17) (until C++20) | | template< class T = std::byte > class polymorphic_allocator; | | (since C++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.

Contents

[edit] Member types

Member type definition
value_type T

[edit] Member functions

(constructor) constructs a polymorphic_allocator (public member function) [edit]
(destructor)(implicitly declared) implicitly declared destructor (public member function) [edit]
operator=[deleted] copy assignment operator is deleted (public member function) [edit]
Public member functions
allocate allocate memory (public member function) [edit]
deallocate deallocate memory (public member function) [edit]
construct constructs an object in allocated storage (public member function) [edit]
destroy(deprecated in C++20)(undeprecated in C++26) destroys an object in allocated storage (public member function) [edit]
allocate_bytes(C++20) allocate raw aligned memory from the underlying resource (public member function) [edit]
deallocate_bytes(C++20) free raw memory obtained from allocate_bytes (public member function) [edit]
allocate_object(C++20) allocates raw memory suitable for an object or an array (public member function) [edit]
deallocate_object(C++20) frees raw memory obtained by allocate_object (public member function) [edit]
new_object(C++20) allocates and constructs an object (public member function) [edit]
delete_object(C++20) destroys and deallocates an object (public member function) [edit]
select_on_container_copy_construction create a new polymorphic_allocator for use by a container's copy constructor (public member function) [edit]
resource returns a pointer to the underlying memory resource (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

[edit] See also

| | an abstract interface for classes that encapsulate memory resources (class) [edit] | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |