scoped_allocator_adaptor-Klasse
Stellt einen Satz von Zuweisern dar.
Syntax
template <class Outer, class... Inner>
class scoped_allocator_adaptor;
Hinweise
Die Klassenvorlage kapselt ein Schachteln eines oder mehrerer Allocators. Jede Klasse hat einen äußersten Zuweiser vom Typ outer_allocator_type
, ein Synonym für Outer
, das eine öffentliche Basis des scoped_allocator_adaptor
-Objekts darstellt. Mit Outer
wird der von einem Container zu verwendende Speicher zugewiesen. Sie erhalten einen Verweis auf dieses Zuweiserbasisobjekt, indem Sie outer_allocator
aufrufen.
Der Rest des Satzes weist Typ inner_allocator_type
auf. Mit einem inneren Zuweiser wird Speicher für Elemente in einem Container zugewiesen. Sie erhalten einen Verweis auf das gespeicherte Objekt dieses Typs, indem Sie inner_allocator
aufrufen. Wenn Inner...
dies nicht leer ist, inner_allocator_type
weist den Typ scoped_allocator_adaptor<Inner...>
auf und inner_allocator
legt ein Elementobjekt fest. Andernfalls weist inner_allocator_type
den Typ scoped_allocator_adaptor<Outer>
auf, und inner_allocator
kennzeichnet das gesamte Objekt.
Der Satz verhält sich so, als hätte er eine beliebige Tiefe, wobei nach Bedarf der innerste gekapselte Zuweiser repliziert wird.
Mehrere Konzepte, die nicht Teil der sichtbaren Schnittstellenhilfe sind, um das Verhalten dieser Klassenvorlage zu beschreiben. Ein äußerster Zuweiser vermittelt alle Aufrufe an die construct- und die destroy-Methode. Es wird effektiv durch die rekursive Funktion OUTERMOST(X)
definiert, wobei OUTERMOST(X)
eine der folgenden ist.
Wenn
X.outer_allocator()
wohlgeformt ist, istOUTERMOST(X)
gleichOUTERMOST(X.outer_allocator())
.Andernfalls lautet
OUTERMOST(X)
X
.
Drei Typen werden zum Zwecke der Darstellung generiert:
Typ | Beschreibung |
---|---|
Outermost |
Der OUTERMOST(*this) -Typ. |
Outermost_traits |
allocator_traits<Outermost> |
Outer_traits |
allocator_traits<Outer> |
Konstruktoren
Name | Beschreibung |
---|---|
scoped_allocator_adaptor | Erstellt ein scoped_allocator_adaptor -Objekt. |
TypeDefs
Name | Beschreibung |
---|---|
const_pointer |
Dieser Typ ist ein Synonym für den const_pointer , der dem Zuweiser Outer zugeordnet ist. |
const_void_pointer |
Dieser Typ ist ein Synonym für den const_void_pointer , der dem Zuweiser Outer zugeordnet ist. |
difference_type |
Dieser Typ ist ein Synonym für den difference_type , der dem Zuweiser Outer zugeordnet ist. |
inner_allocator_type |
Dieser Typ ist ein Synonym für den Typ des geschachtelten Adapters scoped_allocator_adaptor<Inner...> . |
outer_allocator_type |
Dieser Typ ist ein Synonym für den Typ des Basiszuweisers Outer . |
pointer |
Dieser Typ ist ein Synonym für den pointer , der dem Zuweiser Outer zugeordnet ist. |
propagate_on_container_copy_assignment |
Der Typ enthält TRUE nur dann, wenn Outer_traits::propagate_on_container_copy_assignment oder inner_allocator_type::propagate_on_container_copy_assignment TRUE enthalten. |
propagate_on_container_move_assignment |
Der Typ enthält TRUE nur dann, wenn Outer_traits::propagate_on_container_move_assignment oder inner_allocator_type::propagate_on_container_move_assignment TRUE enthalten. |
propagate_on_container_swap |
Der Typ enthält TRUE nur dann, wenn Outer_traits::propagate_on_container_swap oder inner_allocator_type::propagate_on_container_swap TRUE enthalten. |
size_type |
Dieser Typ ist ein Synonym für den size_type , der dem Zuweiser Outer zugeordnet ist. |
value_type |
Dieser Typ ist ein Synonym für den value_type , der dem Zuweiser Outer zugeordnet ist. |
void_pointer |
Dieser Typ ist ein Synonym für den void_pointer , der dem Zuweiser Outer zugeordnet ist. |
Strukturen
Name | Beschreibung |
---|---|
scoped_allocator_adaptor::rebind Struct | Definiert den Typ Outer::rebind\<Other>::other als Synonym für scoped_allocator_adaptor\<Other, Inner...> . |
Methoden
Name | Beschreibung |
---|---|
allocate | Weist Speicher mithilfe des Outer -Zuweisers zu |
construct | Erstellt ein -Objekt. |
deallocate | Hebt die Zuweisung von Objekten mithilfe des äußeren Zuweisers auf |
destroy | Zerstört ein angegebenes Objekt |
inner_allocator | Ruft einen Verweis auf das gespeicherte Objekt vom Typ inner_allocator_type ab |
max_size | Bestimmt die maximale Anzahl von Objekten, die vom äußeren Zuweiser zugewiesen werden kann. |
outer_allocator | Ruft einen Verweis auf das gespeicherte Objekt vom Typ outer_allocator_type ab |
select_on_container_copy_construction | Erstellt ein neues scoped_allocator_adaptor -Objekt mit jedem gespeicherten Zuweiserobjekt, das durch Aufrufen von select_on_container_copy_construction für jeden entsprechenden Zuweiser initialisiert wird. |
Operatoren
Operator | Beschreibung |
---|---|
operator= | |
operator== | |
operator!= |
Anforderungen
Header:<scoped_allocator>
Namespace: std
scoped_allocator_adaptor::zuweisung
Weist Speicher mithilfe des Outer
-Zuweisers zu
pointer allocate(size_type count);pointer allocate(size_type count, const_void_pointer hint);
Parameter
count
Die Anzahl von Elementen, für die ausreichend Speicherplatz zugewiesen werden soll.
Hinweis
Ein Zeiger, der möglicherweise das Zuweiserobjekt unterstützt, indem er die Adresse eines Objekts sucht, das vor der Anforderung zugewiesen wurde.
Rückgabewert
Die erste Memberfunktion gibt Outer_traits::allocate(outer_allocator(), count)
zurück. Die zweite Memberfunktion gibt Outer_traits::allocate(outer_allocator(), count, hint)
zurück.
scoped_allocator_adaptor::construct
Erstellt ein -Objekt.
template <class Ty, class... Atypes>
void construct(Ty* ptr, Atypes&&... args);
template <class Ty1, class Ty2, class... Atypes1, class... Atypes2>
void construct(pair<Ty1, Ty2>* ptr, piecewise_construct_t,
tuple<Atypes1&&...>
first, tuple<Atypes1&&...> second);
template <class Ty1, class Ty2>
void construct(pair<Ty1, Ty2>* ptr);
template <class Ty1, class Ty2, class Uy1, class Uy2>
void construct(pair<Ty1, Ty2>* ptr,
class Uy1&& first, class Uy2&& second);
template <class Ty1, class Ty2, class Uy1, class Uy2>
void construct(pair<Ty1, Ty2>* ptr, const pair<Uy1, Uy2>& right);
template <class Ty1, class Ty2, class Uy1, class Uy2>
void construct(pair<Ty1, Ty2>* ptr, pair<Uy1, Uy2>&& right);
Parameter
ptr
Zeiger auf den Speicherort, in dem das Objekt erstellt werden soll.
args
Liste von Argumenten
first
Objekt des ersten Typs in einem Paar
second
Objekt des zweiten Typs in einem Paar
right
Zu verschiebendes oder kopierendes vorhandenes Objekt
Hinweise
Die erste Methode erstellt das Objekt bei ptr, indem er eine der folgenden Aufrufe Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...)
xargs...
aufruft.
Wenn
uses_allocator<Ty, inner_allocator_type>
FALSE enthält, dann istxargs...
gleichargs...
.Wenn
uses_allocator<Ty, inner_allocator_type>
undis_constructible<Ty, allocator_arg_t, inner_allocator_type, args...>
TRUE enthalten, istxargs...
gleichallocator_arg, inner_allocator(), args...
.Wenn
uses_allocator<Ty, inner_allocator_type>
undis_constructible<Ty, args..., inner_allocator()>
TRUE enthalten, istxargs...
gleichargs..., inner_allocator()
.
Mit der zweiten Methode wird das Paarobjekt bei ptr erstellt, indem das Objekt aufgerufen Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...)
wird, wobei xargs...
dies wie in der obigen Liste geändert wird first...
und Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...)
wo xargs...
wie in der obigen Liste geändert wird second...
.
Die dritte Methode verhält sich wie this->construct(ptr, piecewise_construct, tuple<>, tuple<>)
.
Die vierte Methode verhält sich wie this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second))
.
Die fünfte Methode verhält sich wie this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second))
.
Die sechste Methode verhält sich wie this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(right.first), forward_as_tuple(std::forward<Uy2>(right.second))
.
scoped_allocator_adaptor::d eallocate
Hebt die Zuweisung von Objekten mithilfe des äußeren Zuweisers auf
void deallocate(pointer ptr, size_type count);
Parameter
ptr
Ein Zeiger auf den Anfangsort des Objekts, dessen Zuweisung aufzuheben ist.
count
Die Anzahl der freizugebenden Objekte.
scoped_allocator_adaptor::d estroy
Zerstört ein angegebenes Objekt
template <class Ty>
void destroy(Ty* ptr)
Parameter
ptr
Ein Zeiger auf das Objekt, das zerstört werden soll.
Rückgabewert
Outermost_traits::destroy(OUTERMOST(*this), ptr)
scoped_allocator_adaptor::inner_allocator
Ruft einen Verweis auf das gespeicherte Objekt vom Typ inner_allocator_type
ab
inner_allocator_type& inner_allocator() noexcept;
const inner_allocator_type& inner_allocator() const noexcept;
Rückgabewert
Ein Verweis auf das gespeicherte Objekt vom Typ inner_allocator_type
scoped_allocator_adaptor::max_size
Bestimmt die maximale Anzahl von Objekten, die vom äußeren Zuweiser zugewiesen werden kann.
size_type max_size();
Rückgabewert
Outer_traits::max_size(outer_allocator())
scoped_allocator_adaptor::operator=
scoped_allocator_adaptor& operator=(const scoped_allocator_adaptor&) = default;
scoped_allocator_adaptor& operator=(scoped_allocator_adaptor&&) = default;
scoped_allocator_adaptor::operator==
template <class OuterA1, class OuterA2, class... InnerAllocs>
bool operator==(const scoped_allocator_adaptor<OuterA1, InnerAllocs...>& a,
const scoped_allocator_adaptor<OuterA2, InnerAllocs...>& b) noexcept;
scoped_allocator_adaptor::operator!=
template <class OuterA1, class OuterA2, class... InnerAllocs>
bool operator!=(const scoped_allocator_adaptor<OuterA1, InnerAllocs...>& a,
const scoped_allocator_adaptor<OuterA2, InnerAllocs...>& b) noexcept;
scoped_allocator_adaptor::outer_allocator
Ruft einen Verweis auf das gespeicherte Objekt vom Typ outer_allocator_type
ab
outer_allocator_type& outer_allocator() noexcept;
const outer_allocator_type& outer_allocator() const noexcept;
Rückgabewert
Ein Verweis auf das gespeicherte Objekt vom Typ outer_allocator_type
scoped_allocator_adaptor::rebind Struct
Definiert den Typ Outer::rebind\<Other>::other
als Synonym für scoped_allocator_adaptor\<Other, Inner...>
.
struktur rebind{ typedef Other_traits::rebind<Other> Other_alloc; typedef scoped_allocator_adaptor Other_alloc<, Inner...> other; };
scoped_allocator_adaptor::scoped_allocator_adaptor-Konstruktor
Erstellt ein scoped_allocator_adaptor
-Objekt. Enthält auch einen Destruktor.
scoped_allocator_adaptor();
scoped_allocator_adaptor(const scoped_allocator_adaptor& right) noexcept;
template <class Outer2>
scoped_allocator_adaptor(
const scoped_allocator_adaptor<Outer2, Inner...>& right) noexcept;
template <class Outer2>
scoped_allocator_adaptor(
scoped_allocator_adaptor<Outer2, Inner...>&& right) noexcept;
template <class Outer2>
scoped_allocator_adaptor(Outer2&& al,
const Inner&... rest) noexcept;
~scoped_allocator_adaptor();
Parameter
right
Ein vorhandener scoped_allocator_adaptor
.
al
Eine vorhandener Zuweiser, der als äußerer Zuweiser verwendet werden soll.
rest
Eine Liste von Zuweisern, die als innere Zuweiser verwendet werden sollen.
Hinweise
Der erste Konstruktorstandard erstellt seine gespeicherten Zuweiserobjekte. Jeder der nächsten drei Konstruktoren erstellt seine gespeicherten Allocator-Objekte aus den entsprechenden Objekten rechts. Der letzte Konstruktor erstellt seine gespeicherten Zuweiserobjekte aus den entsprechenden Argumenten in der Argumentliste.
scoped_allocator_adaptor::select_on_container_copy_construction
Erstellt ein neues scoped_allocator_adaptor
-Objekt mit jedem gespeicherten Zuweiserobjekt, das durch Aufrufen von select_on_container_copy_construction
für jeden entsprechenden Zuweiser initialisiert wird.
scoped_allocator_adaptor select_on_container_copy_construction();
Rückgabewert
Diese Methode gibt scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction())
zurück. Das Ergebnis ist ein neues scoped_allocator_adaptor
Objekt mit jedem gespeicherten Allocator-Objekt initialisiert, indem der entsprechende Allocator al aufgerufen al.select_on_container_copy_construction()
wird.