Namensräume
Varianten
Aktionen

std::pmr::polymorphic_allocator

Von cppreference.com
< cpp‎ | memory
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
pmr::polymorphic_allocator
(C++17)
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
 
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) [edit]
(Destruktor)
(implizit deklariert)
implizit deklarierter Destruktor
(public member function) [edit]
operator=
[gelöscht]
Kopierzuweisungsoperator ist gelöscht
(public member function) [edit]
Öffentliche Memberfunktionen
alloziiert Speicher
(public member function) [edit]
deallokiert Speicher
(public member function) [edit]
konstruiert ein Objekt im allokierten Speicher
(public member function) [edit]
(in C++20 veraltet)(in C++26 wieder eingeführt)
zerstört ein Objekt im allokierten Speicher
(public member function) [edit]
allokiert rohen, ausgerichteten Speicher aus der zugrundeliegenden Ressource
(public member function) [edit]
gibt rohen Speicher frei, der von allocate_bytes bezogen wurde
(public member function) [edit]
allokiert rohen Speicher, der für ein Objekt oder ein Array geeignet ist
(public member function) [edit]
gibt rohen Speicher frei, der von allocate_object bezogen wurde
(public member function) [edit]
allokiert und konstruiert ein Objekt
(public member function) [edit]
zerstört und deallokiert ein Objekt
(public member function) [edit]
erstellt einen neuen polymorphic_allocator zur Verwendung durch den Kopierkonstruktor eines Containers
(public member function) [edit]
gibt einen Zeiger auf die zugrundeliegende Speicherressource zurück
(public member function) [edit]

[bearbeiten] Nicht-Member-Funktionen

(in C++20 entfernt)
vergleicht zwei polymorphic_allocator
(function) [edit]

[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

eine abstrakte Schnittstelle für Klassen, die Speicherressourcen kapseln
(Klasse) [edit]