std::pmr::polymorphic_allocator
From cppreference.com
                    
                                        
                    
                    
                                                            
                    | Defined in header  <memory_resource> | ||
| template< class T > class polymorphic_allocator; | (since C++17) | |
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.
| Contents | 
[edit] Member types
| Member type | definition | 
| value_type | T | 
[edit] 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) | |
| Destroys an object in allocated storage (public member function) | |
| Create a new polymorphic_allocatorfor use by a container's copy constructor(public member function) | |
| Returns a pointer to the underlying memory resource (public member function) | |
[edit] Non-member functions
| 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.
[edit] See also
| (C++17) | an abstract interface for classes that encapsulate memory resources (class) | 


