Difference between revisions of "cpp/memory/polymorphic allocator"
m (→Notes: +__cpp_lib_polymorphic_allocator) |
(State that polymorphic_allocator does uses-allocator construction) |
||
Line 16: | Line 16: | ||
All specializations of {{tt|polymorphic_allocator}} meet the [[cpp/named_req/Allocator#Allocator completeness requirements|Allocator completeness requirements]].<!-- LWG 3037 --> | All specializations of {{tt|polymorphic_allocator}} meet the [[cpp/named_req/Allocator#Allocator completeness requirements|Allocator completeness requirements]].<!-- LWG 3037 --> | ||
+ | |||
+ | The {{tt|polymorphic_allocator::construct}} member function does [[cpp/memory/uses_allocator#Uses-allocator_construction|uses-allocator construction]], so that the elements of a container using a {{tt|polymorphic_allocator}} will use that same allocator for their own allocations. | ||
=== Member types === | === Member types === |
Revision as of 08:37, 25 May 2022
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.
Contents |
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 C++20)(undeprecated in C++26) |
destroys an object in allocated storage (public member function) |
(C++20) |
allocate raw aligned memory from the underlying resource (public member function) |
(C++20) |
free raw memory obtained from allocate_bytes (public member function) |
(C++20) |
allocates raw memory suitable for an object or an array (public member function) |
(C++20) |
frees raw memory obtained by allocate_object (public member function) |
(C++20) |
allocates and constructs an object (public member function) |
(C++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 C++20) |
compare two polymorphic_allocator s (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 |
See also
(C++17) |
an abstract interface for classes that encapsulate memory resources (class) |