Condividi tramite


Classe scoped_allocator_adaptor

Rappresenta un annidamento di allocatori.

Sintassi

template <class Outer, class... Inner>
class scoped_allocator_adaptor;

Osservazioni:

Il modello di classe incapsula un nido di uno o più allocatori. Ogni classe di questo tipo ha un allocatore più esterno di tipo outer_allocator_type, un sinonimo di Outer, che è una base pubblica dell'oggetto scoped_allocator_adaptor. Outer viene usato per allocare memoria da destinare a un contenitore. È possibile ottenere un riferimento a questo oggetto allocatore di base chiamando outer_allocator.

La parte rimanente dell'annidamento è di tipo inner_allocator_type. Per allocare memoria per gli elementi all'interno di un contenitore viene usato un allocatore interno. È possibile ottenere un riferimento all'oggetto archiviato di questo tipo chiamando inner_allocator. Se Inner... non è vuoto, inner_allocator_type ha tipo scoped_allocator_adaptor<Inner...>e inner_allocator designa un oggetto membro. In caso contrario, inner_allocator_type è di tipo scoped_allocator_adaptor<Outer> e inner_allocator definisce l'intero oggetto.

L'annidamento si comporta come se avesse una profondità arbitraria, replicando l'allocatore incapsulato più interno in base alle esigenze.

Diversi concetti che non fanno parte dell'interfaccia visibile facilitano la descrizione del comportamento di questo modello di classe. Un allocatore più esterno svolge una funzione di mediazione per tutte le chiamate ai metodi construct e destroy. È definito in modo efficace dalla funzione OUTERMOST(X)ricorsiva , dove OUTERMOST(X) è uno dei seguenti.

  • Se X.outer_allocator() è nel formato corretto, OUTERMOST(X) è OUTERMOST(X.outer_allocator()).

  • In caso contrario, OUTERMOST(X) sarà X.

Tre tipi sono definiti a scopo di illustrazione:

Tipo Descrizione
Outermost Tipo di OUTERMOST(*this).
Outermost_traits allocator_traits<Outermost>
Outer_traits allocator_traits<Outer>

Costruttori

Nome Descrizione
scoped_allocator_adaptor Costruisce un oggetto scoped_allocator_adaptor.

Typedef

Nome Descrizione
const_pointer Questo tipo è un sinonimo del tipo const_pointer associato all'allocatore Outer.
const_void_pointer Questo tipo è un sinonimo del tipo const_void_pointer associato all'allocatore Outer.
difference_type Questo tipo è un sinonimo del tipo difference_type associato all'allocatore Outer.
inner_allocator_type Questo tipo è un sinonimo del tipo dell'adattatore annidato scoped_allocator_adaptor<Inner...>.
outer_allocator_type Questo tipo è un sinonimo del tipo dell'allocatore di base Outer.
pointer Questo tipo è un sinonimo del tipo pointer associato all'allocatore Outer.
propagate_on_container_copy_assignment Il tipo contiene true solo se Outer_traits::propagate_on_container_copy_assignment o inner_allocator_type::propagate_on_container_copy_assignment contiene true.
propagate_on_container_move_assignment Il tipo contiene true solo se Outer_traits::propagate_on_container_move_assignment o inner_allocator_type::propagate_on_container_move_assignment contiene true.
propagate_on_container_swap Il tipo contiene true solo se Outer_traits::propagate_on_container_swap o inner_allocator_type::propagate_on_container_swap contiene true.
size_type Questo tipo è un sinonimo del tipo size_type associato all'allocatore Outer.
value_type Questo tipo è un sinonimo del tipo value_type associato all'allocatore Outer.
void_pointer Questo tipo è un sinonimo del tipo void_pointer associato all'allocatore Outer.

Struct

Nome Descrizione
Struct scoped_allocator_adaptor::rebind Definisce il tipo Outer::rebind<Other>::other come sinonimo di scoped_allocator_adaptor<Other, Inner...>.

Metodi

Nome Descrizione
stanziare Alloca memoria tramite l'allocatore Outer.
costruire Costruisce un oggetto .
Deallocare Dealloca oggetti usando l'allocatore esterno.
distruggere Distrugge un oggetto specificato.
inner_allocator Recupera un riferimento all'oggetto archiviato di tipo inner_allocator_type.
max_size Determina il numero massimo di oggetti che possono essere allocati dall'allocatore esterno.
outer_allocator Recupera un riferimento all'oggetto archiviato di tipo outer_allocator_type.
select_on_container_copy_construction Crea un nuovo oggetto scoped_allocator_adaptor con ogni oggetto allocatore archiviato inizializzato tramite una chiamata a select_on_container_copy_construction per ogni allocatore corrispondente.

Operatori

Operatore Descrizione
Operatore =
operator==
Operatore !=

Requisiti

Intestazione:<scoped_allocator>

Spazio dei nomi: std

scoped_allocator_adaptor::allocate

Alloca memoria tramite l'allocatore Outer.

pointer allocate(size_type count);pointer allocate(size_type count, const_void_pointer hint);

Parametri

contare
Numero di elementi per cui deve essere allocato spazio di archiviazione sufficiente.

alludere
Puntatore che può essere utile all'oggetto allocatore individuando l'indirizzo di un oggetto allocato prima della richiesta.

Valore restituito

La prima funzione membro restituisce Outer_traits::allocate(outer_allocator(), count). La seconda funzione membro restituisce Outer_traits::allocate(outer_allocator(), count, hint).

scoped_allocator_adaptor::construct

Costruisce un oggetto .

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);

Parametri

ptr
Puntatore alla posizione di memoria in cui deve essere costruito l'oggetto.

argomenti
Elenco di argomenti.

primo
Oggetto del primo tipo in una coppia.

secondo
Oggetto del secondo tipo in una coppia.

destra
Oggetto esistente da spostare o copiare.

Osservazioni:

Il primo metodo costruisce l'oggetto in ptr chiamando Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...), dove xargs... è uno dei seguenti.

  • Se uses_allocator<Ty, inner_allocator_type> contiene false, xargs... è args....

  • Se uses_allocator<Ty, inner_allocator_type> e is_constructible<Ty, allocator_arg_t, inner_allocator_type, args...> contengono entrambi true, xargs... è allocator_arg, inner_allocator(), args....

  • Se uses_allocator<Ty, inner_allocator_type> e is_constructible<Ty, args..., inner_allocator()> contengono entrambi true, xargs... è args..., inner_allocator().

Il secondo metodo costruisce l'oggetto pair in ptr chiamando Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...), dove xargs... viene first... modificato come nell'elenco precedente e Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...), dove xargs... viene second... modificato come nell'elenco precedente.

Il terzo metodo si comporta come this->construct(ptr, piecewise_construct, tuple<>, tuple<>).

Il quarto metodo si comporta come this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second)).

Il quinto metodo si comporta come this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second)).

Il sesto metodo si comporta come 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

Dealloca oggetti usando l'allocatore esterno.

void deallocate(pointer ptr, size_type count);

Parametri

ptr
Puntatore alla posizione iniziale degli oggetti da deallocare.

contare
Numero di oggetti da deallocare.

scoped_allocator_adaptor::d estroy

Distrugge un oggetto specificato.

template <class Ty>
void destroy(Ty* ptr)

Parametri

ptr
Puntatore all'oggetto da distruggere.

Valore restituito

Outermost_traits::destroy(OUTERMOST(*this), ptr)

scoped_allocator_adaptor::inner_allocator

Recupera un riferimento all'oggetto archiviato di tipo inner_allocator_type.

inner_allocator_type& inner_allocator() noexcept;
const inner_allocator_type& inner_allocator() const noexcept;

Valore restituito

Riferimento all'oggetto archiviato di tipo inner_allocator_type.

scoped_allocator_adaptor::max_size

Determina il numero massimo di oggetti che possono essere allocati dall'allocatore esterno.

size_type max_size();

Valore restituito

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

Recupera un riferimento all'oggetto archiviato di tipo outer_allocator_type.

outer_allocator_type& outer_allocator() noexcept;
const outer_allocator_type& outer_allocator() const noexcept;

Valore restituito

Riferimento all'oggetto archiviato di tipo outer_allocator_type.

Struct scoped_allocator_adaptor::rebind

Definisce il tipo Outer::rebind<Other>::other come sinonimo di scoped_allocator_adaptor<Other, Inner...>.

struct rebind{ typedef Other_traits::rebind<Other> Other_alloc; typedef scoped_allocator_adaptor Other_alloc<, Inner...> other; };

Costruttore scoped_allocator_adaptor::scoped_allocator_adaptor

Costruisce un oggetto scoped_allocator_adaptor. Include anche un distruttore.

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();

Parametri

destra
Oggetto scoped_allocator_adaptor esistente.

ale
Allocatore esistente da usare come allocatore esterno.

riposo
Elenco di allocatori da usare come allocatori interni.

Osservazioni:

Il primo costruttore crea per impostazione predefinita i relativi oggetti allocator archiviati. Ognuno dei tre costruttori successivi costruisce gli oggetti allocator archiviati dagli oggetti corrispondenti a destra. L'ultimo costruttore crea i relativi oggetti allocator archiviati in base agli argomenti corrispondenti nell'elenco degli argomenti.

scoped_allocator_adaptor::select_on_container_copy_construction

Crea un nuovo oggetto scoped_allocator_adaptor con ogni oggetto allocatore archiviato inizializzato tramite una chiamata a select_on_container_copy_construction per ogni allocatore corrispondente.

scoped_allocator_adaptor select_on_container_copy_construction();

Valore restituito

Questo metodo restituisce scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction()). Il risultato è un nuovo scoped_allocator_adaptor oggetto con ogni oggetto allocatore archiviato inizializzato chiamando al.select_on_container_copy_construction() per l'allocatore corrispondente al.

Vedi anche

Riferimento file di intestazione