Compartilhar via


Classe scoped_allocator_adaptor

Representa um aninhamento de alocadores.

Sintaxe

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

Comentários

O modelo de classe encapsula um aninhamento de um ou mais alocadores. Cada classe desse tipo tem um alocador mais externo do tipo outer_allocator_type, um sinônimo de Outer, que é uma base pública do objeto scoped_allocator_adaptor. Outer é usado para alocar memória para ser usada por um contêiner. Você pode obter uma referência a esse objeto base do alocador chamando outer_allocator.

O restante do aninhamento tem tipo inner_allocator_type. Um alocador interno é usado para alocar memória para elementos dentro de um contêiner. Você pode obter uma referência para o objeto armazenado desse tipo chamando inner_allocator. Se Inner... não está vazio, inner_allocator_type tem tipo scoped_allocator_adaptor<Inner...> e inner_allocator designa um objeto de membro. Caso contrário, inner_allocator_type tem tipo scoped_allocator_adaptor<Outer> e inner_allocator designa o objeto inteiro.

O aninhamento se comporta como se tivesse profundidade arbitrária, replicando seu alocador encapsulado mais interno, conforme necessário.

Vários conceitos que não fazem parte da interface visível ajudam a descrever o comportamento desse modelo de classe. Um alocador mais externo media todas as chamadas para os métodos construct e destroy. Ele é definido efetivamente pela função recursiva OUTERMOST(X), em que OUTERMOST(X) é um dos seguintes.

  • Se X.outer_allocator() for bem formado, OUTERMOST(X) será OUTERMOST(X.outer_allocator()).

  • Caso contrário, OUTERMOST(X) é X.

Três tipos são definidos para fins de exposição:

Tipo Descrição
Outermost O tipo de OUTERMOST(*this).
Outermost_traits allocator_traits<Outermost>
Outer_traits allocator_traits<Outer>

Construtores

Nome Descrição
scoped_allocator_adaptor Constrói um objeto scoped_allocator_adaptor.

Typedefs

Nome Descrição
const_pointer Esse tipo é um sinônimo do const_pointer que está associado com o alocador Outer.
const_void_pointer Esse tipo é um sinônimo do const_void_pointer que está associado com o alocador Outer.
difference_type Esse tipo é um sinônimo do difference_type que está associado com o alocador Outer.
inner_allocator_type Esse tipo é um sinônimo do tipo do adaptador aninhado scoped_allocator_adaptor<Inner...>.
outer_allocator_type Esse tipo é um sinônimo do tipo do alocador base Outer.
pointer Esse tipo é um sinônimo do pointer associado com o alocador Outer.
propagate_on_container_copy_assignment O tipo é true somente se Outer_traits::propagate_on_container_copy_assignment for true ou inner_allocator_type::propagate_on_container_copy_assignment for true.
propagate_on_container_move_assignment O tipo é true somente se Outer_traits::propagate_on_container_move_assignment for true ou inner_allocator_type::propagate_on_container_move_assignment for true.
propagate_on_container_swap O tipo é true somente se Outer_traits::propagate_on_container_swap for true ou inner_allocator_type::propagate_on_container_swap for true.
size_type Esse tipo é um sinônimo do size_type associado com o alocador Outer.
value_type Esse tipo é um sinônimo do value_type associado com o alocador Outer.
void_pointer Esse tipo é um sinônimo do void_pointer associado com o alocador Outer.

Estruturas

Nome Descrição
Struct scoped_allocator_adaptor::rebind Define o tipo Outer::rebind\<Other>::other como um sinônimo de scoped_allocator_adaptor\<Other, Inner...>.

Métodos

Nome Descrição
allocate Aloca memória usando o alocador Outer.
construct Constrói um objeto .
deallocate Desaloca objetos usando o alocador externo.
destroy Destrói um objeto especificado.
inner_allocator Recupera uma referência ao objeto armazenado do tipo inner_allocator_type.
max_size Determina o número máximo de objetos que podem ser alocados pelo alocador externo.
outer_allocator Recupera uma referência ao objeto armazenado do tipo outer_allocator_type.
select_on_container_copy_construction Cria um novo objeto scoped_allocator_adaptor com cada objeto de alocador armazenado inicializado, por meio da chamada de select_on_container_copy_construction para cada alocador correspondente.

Operadores

Operador Descrição
operator=
operator==
operator!=

Requisitos

Cabeçalho:<scoped_allocator>

Namespace: std

scoped_allocator_adaptor::allocate

Aloca memória usando o alocador Outer.

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

Parâmetros

count
O número de elementos para os quais um armazenamento suficiente deve ser alocado.

hint
Um ponteiro que pode ajudar o objeto alocador localizando o endereço de um objeto alocado antes da solicitação.

Valor de retorno

A primeira função membro retorna Outer_traits::allocate(outer_allocator(), count). A segunda função membro retorna Outer_traits::allocate(outer_allocator(), count, hint).

scoped_allocator_adaptor::construct

Constrói um objeto .

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

Parâmetros

ptr
Um ponteiro para o local da memória em que o objeto deve ser criado.

args
Uma lista de argumentos.

first
Um objeto do primeiro tipo em um par.

second
Um objeto do segundo tipo em um par.

direita
Um objeto existente a ser movido ou copiado.

Comentários

O primeiro método cria o objeto em ptr chamando Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...), em que xargs... é um dos mostrados a seguir.

  • Se uses_allocator<Ty, inner_allocator_type> contém false, xargs... é args....

  • Se uses_allocator<Ty, inner_allocator_type> for true e is_constructible<Ty, allocator_arg_t, inner_allocator_type, args...> for true, então xargs... será allocator_arg, inner_allocator(), args....

  • Se uses_allocator<Ty, inner_allocator_type> for true e is_constructible<Ty, args..., inner_allocator()> for true, então xargs... será args..., inner_allocator().

O segundo método cria o objeto par em ptr chamando Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...), em que xargs... é first... modificado como na lista acima, e Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...), em que xargs... é second... modificado como na lista acima.

O terceiro método se comporta da mesma maneira que this->construct(ptr, piecewise_construct, tuple<>, tuple<>).

O quarto método se comporta da mesma maneira que this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second)).

O quinto método se comporta da mesma maneira que this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second)).

O sexto método se comporta da mesma maneira que this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(right.first), forward_as_tuple(std::forward<Uy2>(right.second)).

scoped_allocator_adaptor::deallocate

Desaloca objetos usando o alocador externo.

void deallocate(pointer ptr, size_type count);

Parâmetros

ptr
Um ponteiro para o local inicial dos objetos a serem desalocados.

count
O número de objetos a serem desalocados.

scoped_allocator_adaptor::destroy

Destrói um objeto especificado.

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

Parâmetros

ptr
Um ponteiro para o objeto a ser destruído.

Valor de retorno

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

scoped_allocator_adaptor::inner_allocator

Recupera uma referência ao objeto armazenado do tipo inner_allocator_type.

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

Valor de retorno

Uma referência ao objeto armazenado do tipo inner_allocator_type.

scoped_allocator_adaptor::max_size

Determina o número máximo de objetos que podem ser alocados pelo alocador externo.

size_type max_size();

Valor de retorno

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 uma referência ao objeto armazenado do tipo outer_allocator_type.

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

Valor de retorno

Uma referência ao objeto armazenado do tipo outer_allocator_type.

Struct scoped_allocator_adaptor::rebind

Define o tipo Outer::rebind\<Other>::other como um sinônimo de scoped_allocator_adaptor\<Other, Inner...>.

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

Construtor scoped_allocator_adaptor::scoped_allocator_adaptor

Constrói um objeto scoped_allocator_adaptor. Também inclui um destruidor.

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

Parâmetros

direita
Um scoped_allocator_adaptor existente.

al
Um alocador existente a ser usado como o alocador externo.

rest
Um alocador existente a ser usado como os alocadores internos.

Comentários

O primeiro padrão de construtor cria seus objetos de alocador armazenado. Cada um dos três constructos de construtor seguintes cria seus objetos de alocador armazenado dos objetos correspondentes em right. O último construtor cria seus objetos de alocador armazenado dos argumentos correspondentes na lista de argumentos.

scoped_allocator_adaptor::select_on_container_copy_construction

Cria um novo objeto scoped_allocator_adaptor com cada objeto de alocador armazenado inicializado, por meio da chamada de select_on_container_copy_construction para cada alocador correspondente.

scoped_allocator_adaptor select_on_container_copy_construction();

Valor de retorno

Esse método retorna efetivamente scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction()). O resultado é um novo objeto scoped_allocator_adaptor com cada objeto de alocador armazenado inicializado, por meio da chamada de al.select_on_container_copy_construction() para o alocador al correspondente.

Confira também

Referência de Arquivos de Cabeçalho