# std::pmr::polymorphic_allocator

From cppreference.com
< cpp‎ | memory

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.

### Member types

Member type | definition
`value_type` | `T`

### Member functions

(constructor) | 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 | Allocate memory (public member function)
deallocate | Deallocate memory (public member function)
construct | Constructs an object in allocated storage (public member function)
destroy | Destroys an object in allocated storage (public member function)
allocate_bytes (C++20) | Allocate raw aligned memory from the underlying resource (public member function)
deallocate_bytes (C++20) | Free raw memory obtained from allocate_bytes (public member function)
allocate_object (C++20) | Allocates raw memory suitable for an object or an array (public member function)
deallocate_object (C++20) | Frees raw memory obtained by allocate_object (public member function)
new_object (C++20) | Allocates and constructs an object (public member function)
delete_object (C++20) | Destroys and deallocates an object (public member function)
select_on_container_copy_construction | Create a new `polymorphic_allocator` for use by a container's copy constructor (public member function)
resource | Returns a pointer to the underlying memory resource (public member function)

### Non-member functions

operator==operator!= | 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

memory_resource (C++17) | an abstract interface for classes that encapsulate memory resources (class)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/polymorphic_allocator&oldid=109500"