std::pmr::p...ic_allocator(3)
π NAME π
okay so you're in the C++ Standard Library manual, bestie, and this page is about std::pmr::polymorphic_allocator β literally the same name twice, it's giving main character energy: std::pmr::polymorphic_allocator β std::pmr::polymorphic_allocator. slay.
πΈ Synopsis πΈ
Defined in header <memory_resource>
template< class T > (since C++17)
class polymorphic_allocator; (until C++20)
template< class T = std::byte > (since C++20)
class polymorphic_allocator;
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. For example, a std::pmr::vector<std::pmr::string> will use the same memory_resource for the vector's storage and each string's storage.
For non-polymorphic allocators, similar propagation can be achieved with the help of std::scoped_allocator_adaptor.
π§© Member types π§©
value_typeβT
π οΈ Member functions π οΈ
constructorβ constructs apolymorphic_allocator(public member function)destructorβ implicitly declared destructor (implicitly declared) (public member function)operator=β copy assignment operator is deleted[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 (deprecated in C++20) (undeprecated in C++26) (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 fromallocate_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 byallocate_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 newpolymorphic_allocatorfor 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==β compare twopolymorphic_allocators (function)operator!=β (function) (removed in C++20)
π 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.
π¨ fr fr, that undefined behavior is not a vibe. Do not collect $200, do not pass go, just don't do it.
Feature-test macro vibes:
__cpp_lib_polymorphic_allocatorβ value201902L, std(C++20), feature:std::pmr::polymorphic_allocator<>as a vocabulary type
π See also π
memory_resourceβ an abstract interface for classes that encapsulate memory resources (C++17) (class)
made with π from http://cppreference.com, version 2024.06.10 β catch you on the next page, bestie π«Άβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms