Teilen über


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, ist OUTERMOST(X) gleich OUTERMOST(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 ist xargs... gleich args....

  • Wenn uses_allocator<Ty, inner_allocator_type> und is_constructible<Ty, allocator_arg_t, inner_allocator_type, args...> TRUE enthalten, ist xargs... gleich allocator_arg, inner_allocator(), args....

  • Wenn uses_allocator<Ty, inner_allocator_type> und is_constructible<Ty, args..., inner_allocator()> TRUE enthalten, ist xargs... gleich args..., 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.

Siehe auch

Headerdateienreferenz