Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/memory/polymorphic allocator"

From cppreference.com
< cpp‎ | memory
(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}}
{{ddcl|header=memory_resource | since=c++17 |
+
{{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

 
 
Dynamic memory management
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Allocators
Garbage collection support
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)



 
 
 
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) [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 memory
(public member function) [edit]
deallocate memory
(public member function) [edit]
constructs an object in allocated storage
(public member function) [edit]
(deprecated in C++20)(undeprecated in C++26)
destroys an object in allocated storage
(public member function) [edit]
allocate raw aligned memory from the underlying resource
(public member function) [edit]
free raw memory obtained from allocate_bytes
(public member function) [edit]
allocates raw memory suitable for an object or an array
(public member function) [edit]
frees raw memory obtained by allocate_object
(public member function) [edit]
allocates and constructs an object
(public member function) [edit]
destroys and deallocates an object
(public member function) [edit]
create a new polymorphic_allocator for use by a container's copy constructor
(public member function) [edit]
returns a pointer to the underlying memory resource
(public member function) [edit]

Non-member functions

(removed in C++20)
compare two polymorphic_allocators
(function) [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.

See also

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