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 eis_constructible<Ty, allocator_arg_t, inner_allocator_type, args...>
for true, entãoxargs...
seráallocator_arg, inner_allocator(), args...
.Se
uses_allocator<Ty, inner_allocator_type>
for true eis_constructible<Ty, args..., inner_allocator()>
for true, entãoxargs...
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::operador==
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::operador!=
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.