std::pmr::polymorphic_allocator
| Definiert in Header <memory_resource> |
||
template< class T > class polymorphic_allocator; |
(seit C++17) (bis C++20) |
|
| template< class T = std::byte > class polymorphic_allocator; |
(seit C++20) | |
Die Klassenschablone std::pmr::polymorphic_allocator ist ein Allocator, der ein unterschiedliches Allokationsverhalten zeigt, abhängig von der std::pmr::memory_resource, aus der er konstruiert wird. Da memory_resource Laufzeitpolymorphie zur Verwaltung von Allokationen verwendet, sind verschiedene Container-Instanzen mit polymorphic_allocator als statischem Allokator-Typ interoperabel, können sich aber so verhalten, als hätten sie unterschiedliche Allokator-Typen.
Alle Spezialisierungen von polymorphic_allocator erfüllen die Anforderungen an die Vollständigkeit von Allocators.
Die Member-Funktion polymorphic_allocator::construct führt Uses-Allocator-Konstruktion durch, sodass die Elemente eines Containers, der einen polymorphic_allocator verwendet, denselben Allokator für ihre eigenen Allokationen verwenden. Beispielsweise verwendet ein std::pmr::vector<std::pmr::string> denselben memory_resource sowohl für den Speicher des vector als auch für den Speicher jedes string.
Für nicht-polymorphe Allocators kann eine ähnliche Weitergabe mit Hilfe von std::scoped_allocator_adaptor erreicht werden.
Inhalt |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition |
value_type
|
T
|
[bearbeiten] Member-Funktionen
konstruiert einen polymorphic_allocator(public member function) | |
| (Destruktor) (implizit deklariert) |
implizit deklarierter Destruktor (public member function) |
| operator= [gelöscht] |
Kopierzuweisungsoperator ist gelöscht (public member function) |
Öffentliche Memberfunktionen | |
| alloziiert Speicher (public member function) | |
| deallokiert Speicher (public member function) | |
| konstruiert ein Objekt im allokierten Speicher (public member function) | |
| (in C++20 veraltet)(in C++26 wieder eingeführt) |
zerstört ein Objekt im allokierten Speicher (public member function) |
| (C++20) |
allokiert rohen, ausgerichteten Speicher aus der zugrundeliegenden Ressource (public member function) |
| (C++20) |
gibt rohen Speicher frei, der von allocate_bytes bezogen wurde(public member function) |
| (C++20) |
allokiert rohen Speicher, der für ein Objekt oder ein Array geeignet ist (public member function) |
| (C++20) |
gibt rohen Speicher frei, der von allocate_object bezogen wurde(public member function) |
| (C++20) |
allokiert und konstruiert ein Objekt (public member function) |
| (C++20) |
zerstört und deallokiert ein Objekt (public member function) |
erstellt einen neuen polymorphic_allocator zur Verwendung durch den Kopierkonstruktor eines Containers(public member function) | |
| gibt einen Zeiger auf die zugrundeliegende Speicherressource zurück (public member function) | |
[bearbeiten] Nicht-Member-Funktionen
| (in C++20 entfernt) |
vergleicht zwei polymorphic_allocator(function) |
[bearbeiten] Anmerkungen
polymorphic_allocator propagiert nicht bei Container-Kopierzuweisung, Verschiebezuweisung oder Swap. Infolgedessen kann die Verschiebezuweisung eines polymorphic_allocator-verwendenden Containers eine Ausnahme auslösen, und das Tauschen von zwei polymorphic_allocator-verwendenden Containern, deren Allocators sich nicht vergleichen lassen, führt zu undefiniertem Verhalten.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_polymorphic_allocator |
201902L |
(C++20) | std::pmr::polymorphic_allocator<> als Vokabulartyp |
[bearbeiten] Siehe auch
| (C++17) |
eine abstrakte Schnittstelle für Klassen, die Speicherressourcen kapseln (Klasse) |