std:: scoped_allocator_adaptor
|
Definiert in Header
<scoped_allocator>
|
||
|
template
<
class
OuterAlloc,
class
...
InnerAllocs
>
class
scoped_allocator_adaptor
|
(seit C++11) | |
Die
std::scoped_allocator_adaptor
-Klassentemplate ist ein Allokator, der mit mehrstufigen Containern verwendet werden kann (Vektor von Sets von Listen von Tupeln von Maps, etc.). Sie wird mit einem äußeren Allokatortyp
OuterAlloc
und null oder mehr inneren Allokatortypen
InnerAlloc...
instanziiert. Ein Container, der direkt mit einem
scoped_allocator_adaptor
konstruiert wird, verwendet
OuterAlloc
zur Allokation seiner Elemente, aber wenn ein Element selbst ein Container ist, verwendet es den ersten inneren Allokator. Die Elemente dieses Containers, falls sie selbst Container sind, verwenden den zweiten inneren Allokator, usw. Wenn es mehr Ebenen im Container als innere Allokatoren gibt, wird der letzte innere Allokator für alle weiteren verschachtelten Container wiederverwendet.
Der Zweck dieses Adapters ist die korrekte Initialisierung zustandsbehafteter Allokatoren in geschachtelten Containern, beispielsweise wenn alle Ebenen eines geschachtelten Containers im selben Shared-Memory-Segment platziert werden müssen. Der Konstruktor des Adapters nimmt die Argumente für alle Allokatoren in der Liste entgegen, und jeder geschachtelte Container bezieht den Zustand seines Allokators bei Bedarf vom Adapter.
Für den Zweck von
scoped_allocator_adaptor
, wenn der nächste innere Allokator
A
ist, nimmt jede Klasse
T
, für die
std::
uses_allocator
<
T,A
>
::
value
==
true
an der Rekursion teil, als ob sie ein Container wäre. Zusätzlich wird
std::pair
durch spezifische Überladungen von
scoped_allocator_adaptor::construct
als ein solcher Container behandelt.
Typische Implementierungen halten eine Instanz eines
std::scoped_allocator_adaptor<InnerAllocs...>
als Mitgliedsobjekt.
Beachten Sie, dass
std::pmr::polymorphic_allocator
s
gemäß
Uses-allocator-Konstruktion
zu verschachtelten Containern propagieren und
std::scoped_allocator_adaptor
nicht benötigen (und nicht damit funktionieren).
Inhaltsverzeichnis |
Verschachtelte Typen
| Typ | Definition |
outer_allocator_type
|
OuterAlloc
|
inner_allocator_type
|
|
value_type
|
std:: allocator_traits < OuterAlloc > :: value_type |
size_type
|
std:: allocator_traits < OuterAlloc > :: size_type |
difference_type
|
std:: allocator_traits < OuterAlloc > :: difference_type |
pointer
|
std:: allocator_traits < OuterAlloc > :: pointer |
const_pointer
|
std:: allocator_traits < OuterAlloc > :: const_pointer |
void_pointer
|
std:: allocator_traits < OuterAlloc > :: void_pointer |
const_void_pointer
|
std:: allocator_traits < OuterAlloc > :: const_void_pointer |
Gegeben die Menge von
OuterAlloc
und
InnerAlloc...
als
Allocs
:
| Typ | Definition |
propagate_on_container_copy_assignment
|
|
propagate_on_container_move_assignment
|
|
propagate_on_container_swap
|
|
is_always_equal
|
|
Memberfunktionen
erstellt ein neues
scoped_allocator_adaptor
Objekt
(öffentliche Elementfunktion) |
|
zerstört ein
scoped_allocator_adaptor
Objekt
(öffentliche Elementfunktion) |
|
weist einen
scoped_allocator_adaptor
zu
(öffentliche Elementfunktion) |
|
erhält eine
inner_allocator
Referenz
(öffentliche Elementfunktion) |
|
erhält eine
outer_allocator
Referenz
(öffentliche Elementfunktion) |
|
|
allokiert nicht initialisierten Speicher mit dem äußeren Allokator
(öffentliche Elementfunktion) |
|
|
gibt Speicher mit dem äußeren Allokator frei
(öffentliche Elementfunktion) |
|
|
gibt die größte vom äußeren Allokator unterstützte Allokationsgröße zurück
(öffentliche Elementfunktion) |
|
|
konstruiert ein Objekt im allokierten Speicher und übergibt den inneren Allokator an seinen Konstruktor falls zutreffend
(öffentliche Elementfunktion) |
|
|
zerstört ein Objekt im allokierten Speicher
(öffentliche Elementfunktion) |
|
kopiert den Zustand von
scoped_allocator_adaptor
und all seiner Allokatoren
(öffentliche Elementfunktion) |
|
Nur zur Darstellung dienende Funktionsvorlagen |
|
|
erhält den äußersten Allokator
( nur zur Darstellung dienende Elementfunktion* ) |
|
|
konstruiert ein Objekt mit dem äußersten Allokator
( nur zur Darstellung dienende Elementfunktion* ) |
|
|
zerstört ein Objekt mit dem äußersten Allokator
( nur zur Darstellung dienende Elementfunktion* ) |
|
Nicht-Member-Funktionen
|
(entfernt in C++20)
|
vergleicht zwei
scoped_allocator_adaptor
Objekte
(Funktions-Template) |
Deduction guides (seit C++17)
Geschachtelte Klassen
| Klasse | Definition |
rebind
|
template
<
class
T
>
struct
rebind
|
Beispiel
#include <boost/interprocess/allocators/adaptive_pool.hpp> #include <boost/interprocess/managed_shared_memory.hpp> #include <scoped_allocator> #include <vector> namespace bi = boost::interprocess; template<class T> using alloc = bi::adaptive_pool<T, bi::managed_shared_memory::segment_manager>; using ipc_row = std::vector<int, alloc<int>>; using ipc_matrix = std::vector<ipc_row, std::scoped_allocator_adaptor<alloc<ipc_row>>>; int main() { bi::managed_shared_memory s(bi::create_only, "Demo", 65536); // Vektor von Vektoren im Shared Memory erstellen ipc_matrix v(s.get_segment_manager()); // Für alle diese Erweiterungen erhalten die inneren Vektoren ihre Allokator-Argumente // vom scoped_allocator_adaptor des äußeren Vektors v.resize(1); v[0].push_back(1); v.emplace_back(2); std::vector<int> local_row = {1, 2, 3}; v.emplace_back(local_row.begin(), local_row.end()); bi::shared_memory_object::remove("Demo"); }
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2108 | C++11 |
Es gab keine Möglichkeit festzustellen, ob
scoped_allocator_adaptor
zustandslos ist
|
Bereitstellung von
is_always_equal
|
Siehe auch
|
(C++11)
|
stellt Informationen über Allocator-Typen bereit
(Klassen-Template) |
|
(C++11)
|
prüft, ob der angegebene Typ Uses-Allocator-Konstruktion unterstützt
(Klassen-Template) |
|
der Standard-Allocator
(Klassen-Template) |