Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Representa um ninho de alocadores.
Sintaxe
template <class Outer, class... Inner>
class scoped_allocator_adaptor;
Observações
O modelo de classe encapsula um ninho de um ou mais alocadores. Cada classe tem um alocador externo do tipo outer_allocator_type, um sinônimo de Outer, que é uma base pública do scoped_allocator_adaptor objeto.
Outer é usado para alocar memória a ser usada por um contêiner. Você pode obter uma referência a esse objeto base do alocador chamando outer_allocator.
O restante do ninho 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 ao objeto armazenado desse tipo chamando inner_allocator. Se Inner... não estiver vazio, inner_allocator_type tem tipo scoped_allocator_adaptor<Inner...>e inner_allocator designa um objeto membro. Caso contrário, inner_allocator_type tem tipo scoped_allocator_adaptor<Outer>, e inner_allocator designa o objeto inteiro.
O ninho 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 externo medeia todas as chamadas para os métodos de construção e destruição. É efetivamente definido pela função OUTERMOST(X)recursiva, onde OUTERMOST(X) é um dos seguintes.
Se
X.outer_allocator()está bem formado, entãoOUTERMOST(X)éOUTERMOST(X.outer_allocator()).Caso contrário,
OUTERMOST(X)éX.
Para efeitos de exposição, definem-se três tipos:
| 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 (definições de tipos)
| Nome | Descrição |
|---|---|
const_pointer |
Este tipo é sinónimo do const_pointer que está associado ao alocador Outer. |
const_void_pointer |
Este tipo é sinónimo do const_void_pointer que está associado ao alocador Outer. |
difference_type |
Este tipo é sinónimo do difference_type que está associado ao alocador Outer. |
inner_allocator_type |
Este tipo é um sinônimo para o tipo do adaptador scoped_allocator_adaptor<Inner...>aninhado. |
outer_allocator_type |
Este tipo é sinónimo do tipo do alocador Outerde base. |
pointer |
Este tipo é sinónimo do pointer associado ao alocador Outer. |
propagate_on_container_copy_assignment |
O tipo só é verdadeiro se Outer_traits::propagate_on_container_copy_assignment for verdadeiro ou inner_allocator_type::propagate_on_container_copy_assignment se for verdadeiro. |
propagate_on_container_move_assignment |
O tipo só é verdadeiro se Outer_traits::propagate_on_container_move_assignment for verdadeiro ou inner_allocator_type::propagate_on_container_move_assignment se for verdadeiro. |
propagate_on_container_swap |
O tipo só é verdadeiro se Outer_traits::propagate_on_container_swap for verdadeiro ou inner_allocator_type::propagate_on_container_swap se for verdadeiro. |
size_type |
Este tipo é sinónimo do size_type associado ao alocador Outer. |
value_type |
Este tipo é sinónimo do value_type associado ao alocador Outer. |
void_pointer |
Este tipo é sinónimo do void_pointer associado ao alocador Outer. |
Estruturas
| Nome | Descrição |
|---|---|
| scoped_allocator_adaptor::rebind Struct | Define o tipo Outer::rebind<Other>::other como sinônimo de scoped_allocator_adaptor<Other, Inner...>. |
Metodologia
| Nome | Descrição |
|---|---|
| alocar | Aloca memória usando o Outer alocador. |
| construir | Constrói um objeto. |
| desalocar | Deslocaliza objetos usando o alocador externo. |
| destruir | 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 scoped_allocator_adaptor objeto com cada objeto de alocador armazenado inicializado chamando select_on_container_copy_construction cada alocador correspondente. |
Operadores
| Operador | Descrição |
|---|---|
| operador= | |
| operador== | |
| operador!= |
Requerimentos
Cabeçalho:<scoped_allocator>
Espaço de nomes: std
scoped_allocator_adaptor::alocar
Aloca memória usando o Outer alocador.
pointer allocate(size_type count);pointer allocate(size_type count, const_void_pointer hint);
Parâmetros
contagem
O número de elementos para os quais deve ser atribuído armazenamento suficiente.
Dica
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 de membro retorna Outer_traits::allocate(outer_allocator(), count). A segunda função de 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 onde o objeto deve ser construído.
Args
Uma lista de argumentos.
primeira
Um objeto do primeiro tipo em um par.
segunda
Um objeto do segundo tipo em um par.
direito
Um objeto existente a ser movido ou copiado.
Observações
O primeiro método constrói o objeto em ptr chamando Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...), onde xargs... é um dos seguintes.
Se
uses_allocator<Ty, inner_allocator_type>mantém falso, entãoxargs...éargs....Se
uses_allocator<Ty, inner_allocator_type>é verdadeiro, eis_constructible<Ty, allocator_arg_t, inner_allocator_type, args...>se mantém verdadeiro, entãoxargs...éallocator_arg, inner_allocator(), args....Se
uses_allocator<Ty, inner_allocator_type>é verdadeiro, eis_constructible<Ty, args..., inner_allocator()>se mantém verdadeiro, entãoxargs...éargs..., inner_allocator().
O segundo método constrói o objeto par em ptr chamando Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...), onde xargs... é first... modificado como na lista acima, e Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...), onde xargs... é second... modificado como na lista acima.
O terceiro método comporta-se da mesma forma que this->construct(ptr, piecewise_construct, tuple<>, tuple<>).
O quarto método comporta-se da mesma forma que this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second)).
O quinto método comporta-se da mesma forma que this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second)).
O sexto método comporta-se da mesma forma 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::d eallocate
Deslocaliza 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 deslocalizados.
contagem
O número de objetos a serem negociados.
scoped_allocator_adaptor::d estroy
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::operador=
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.
scoped_allocator_adaptor::rebind Struct
Define o tipo Outer::rebind<Other>::other como sinônimo de scoped_allocator_adaptor<Other, Inner...>.
struct rebind{ typedef Other_traits::rebind<Outros> Other_alloc; typedef scoped_allocator_adaptor<Other_alloc, Inner...> outros; };
scoped_allocator_adaptor::scoped_allocator_adaptor Construtor
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
direito
Uma scoped_allocator_adaptorexistente .
al
Um alocador existente para ser usado como alocador externo.
resto
Uma lista de alocadores a serem usados como alocadores internos.
Observações
O primeiro construtor padrão constrói seus objetos de alocador armazenados. Cada um dos próximos três construtores constrói seus objetos de alocador armazenados a partir dos objetos correspondentes à direita. O último construtor constrói seus objetos de alocador armazenados a partir dos argumentos correspondentes na lista de argumentos.
scoped_allocator_adaptor::select_on_container_copy_construction
Cria um novo scoped_allocator_adaptor objeto com cada objeto de alocador armazenado inicializado chamando select_on_container_copy_construction cada alocador correspondente.
scoped_allocator_adaptor select_on_container_copy_construction();
Valor de retorno
Esse método efetivamente retorna scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction()). O resultado é um novo scoped_allocator_adaptor objeto com cada objeto alocador armazenado inicializado chamando al.select_on_container_copy_construction() o alocador correspondente al.