Difference between revisions of "cpp/memory/polymorphic allocator"
(LWG3037, noting inline but not DR listing) |
(P0339R6 polymorphic_allocator<>) |
||
Line 1: | Line 1: | ||
{{cpp/memory/pmr/title|polymorphic_allocator}} | {{cpp/memory/pmr/title|polymorphic_allocator}} | ||
{{cpp/memory/polymorphic_allocator/navbar}} | {{cpp/memory/polymorphic_allocator/navbar}} | ||
− | {{ | + | {{dcl begin}} |
+ | {{dcl|header=memory_resource}} | ||
+ | {{dcl | since=c++17 | until=c++20| | ||
template< class T > | template< class T > | ||
class polymorphic_allocator; | class polymorphic_allocator; | ||
}} | }} | ||
+ | {{dcl | since=c++20|1= | ||
+ | template< class T = std::byte > | ||
+ | class polymorphic_allocator; | ||
+ | }} | ||
+ | {{dcl end}} | ||
The class template {{tt|std::pmr::polymorphic_allocator}} is an {{named req|Allocator}} whose allocation behavior depends on the memory resource it is constructed with. Thus, different instances of {{tt|polymorphic_allocator}} can exhibit entirely different allocation behavior. This runtime polymorphism allows objects using {{tt|polymorphic_allocator}} to behave as if they used different allocator types at run time despite the identical static allocator type. | The class template {{tt|std::pmr::polymorphic_allocator}} is an {{named req|Allocator}} whose allocation behavior depends on the memory resource it is constructed with. Thus, different instances of {{tt|polymorphic_allocator}} can exhibit entirely different allocation behavior. This runtime polymorphism allows objects using {{tt|polymorphic_allocator}} to behave as if they used different allocator types at run time despite the identical static allocator type. | ||
Line 27: | Line 34: | ||
{{dsc inc | cpp/memory/polymorphic_allocator/dsc construct}} | {{dsc inc | cpp/memory/polymorphic_allocator/dsc construct}} | ||
{{dsc inc | cpp/memory/polymorphic_allocator/dsc destroy}} | {{dsc inc | cpp/memory/polymorphic_allocator/dsc destroy}} | ||
+ | {{dsc inc | cpp/memory/polymorphic_allocator/dsc allocate_bytes}} | ||
+ | {{dsc inc | cpp/memory/polymorphic_allocator/dsc deallocate_bytes}} | ||
+ | {{dsc inc | cpp/memory/polymorphic_allocator/dsc allocate_object}} | ||
+ | {{dsc inc | cpp/memory/polymorphic_allocator/dsc deallocate_object}} | ||
+ | {{dsc inc | cpp/memory/polymorphic_allocator/dsc new_object}} | ||
+ | {{dsc inc | cpp/memory/polymorphic_allocator/dsc delete_object}} | ||
{{dsc inc | cpp/memory/polymorphic_allocator/dsc select_on_container_copy_construction}} | {{dsc inc | cpp/memory/polymorphic_allocator/dsc select_on_container_copy_construction}} | ||
{{dsc inc | cpp/memory/polymorphic_allocator/dsc resource}} | {{dsc inc | cpp/memory/polymorphic_allocator/dsc resource}} |
Revision as of 06:51, 26 February 2019
|
||
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 whose allocation behavior depends on the memory resource it is constructed with. Thus, different instances of polymorphic_allocator
can exhibit entirely different allocation behavior. This runtime polymorphism allows objects using polymorphic_allocator
to behave as if they used different allocator types at run time despite the identical static allocator type.
All specializations of polymorphic_allocator
meet the Allocator completeness requirements.
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.
See also
(C++17) |
an abstract interface for classes that encapsulate memory resources (class) |