scoped_allocator_adaptor (clase)
Representa una anidación de asignadores.
Sintaxis
template <class Outer, class... Inner>
class scoped_allocator_adaptor;
Comentarios
La plantilla de clase encapsula una anidación de uno o más asignadores. Cada clase tiene un asignador exterior de tipo outer_allocator_type
, un sinónimo de Outer
, que es una base pública del objeto scoped_allocator_adaptor
. Outer
se usa para asignar la memoria que va a usar un contenedor. Puede obtener una referencia a este objeto base de asignador mediante una llamada a outer_allocator
.
El resto de la anidación tiene el tipo inner_allocator_type
. Un asignador interno se usa para asignar memoria para los elementos dentro de un contenedor. Puede obtener una referencia al objeto almacenado de este tipo mediante una llamada a inner_allocator
. Si Inner...
no está vacío, inner_allocator_type
tiene el tipo scoped_allocator_adaptor<Inner...>
y inner_allocator
designa un objeto miembro. De lo contrario, inner_allocator_type
tiene el tipo scoped_allocator_adaptor<Outer>
y inner_allocator
designa el objeto completo.
La anidación se comporta como si tuviera una profundidad arbitraria, y replica su asignador interior encapsulado según sea necesario.
Varios conceptos que no forman parte de la interfaz visible ayudan a describir el comportamiento de esta plantilla de clase. Un asignador exterior media en todas las llamadas a los métodos de construcción y destrucción. Se define eficazmente mediante la función recursiva OUTERMOST(X)
, donde OUTERMOST(X)
es uno de los siguientes.
Si
X.outer_allocator()
está bien formado, entoncesOUTERMOST(X)
esOUTERMOST(X.outer_allocator())
.En caso contrario,
OUTERMOST(X)
esX
.
Como ejemplo, se definen tres tipos:
Tipo | Descripción |
---|---|
Outermost |
Tipo de OUTERMOST(*this) . |
Outermost_traits |
allocator_traits<Outermost> |
Outer_traits |
allocator_traits<Outer> |
Constructores
Nombre | Descripción |
---|---|
scoped_allocator_adaptor | Construye un objeto scoped_allocator_adaptor . |
Typedefs
Nombre | Descripción |
---|---|
const_pointer |
Este tipo es un sinónimo del const_pointer que está asociado con el asignador Outer . |
const_void_pointer |
Este tipo es un sinónimo del const_void_pointer que está asociado con el asignador Outer . |
difference_type |
Este tipo es un sinónimo del difference_type que está asociado con el asignador Outer . |
inner_allocator_type |
Este tipo es un sinónimo del tipo del adaptador anidado scoped_allocator_adaptor<Inner...> . |
outer_allocator_type |
Este tipo es un sinónimo del tipo del asignador base Outer . |
pointer |
Este tipo es un sinónimo del pointer asociado con el asignador Outer . |
propagate_on_container_copy_assignment |
El tipo es verdadero solo si Outer_traits::propagate_on_container_copy_assignment es verdadero o inner_allocator_type::propagate_on_container_copy_assignment es verdadero. |
propagate_on_container_move_assignment |
El tipo es verdadero solo si Outer_traits::propagate_on_container_move_assignment es verdadero o inner_allocator_type::propagate_on_container_move_assignment es verdadero. |
propagate_on_container_swap |
El tipo es verdadero solo si Outer_traits::propagate_on_container_swap es verdadero o inner_allocator_type::propagate_on_container_swap es verdadero. |
size_type |
Este tipo es un sinónimo del size_type asociado con el asignador Outer . |
value_type |
Este tipo es un sinónimo del value_type asociado con el asignador Outer . |
void_pointer |
Este tipo es un sinónimo del void_pointer asociado con el asignador Outer . |
Estructuras
Nombre | Descripción |
---|---|
scoped_allocator_adaptor::rebind (Struct) | Define el tipo Outer::rebind\<Other>::other como sinónimo de scoped_allocator_adaptor\<Other, Inner...> . |
Métodos
Nombre | Descripción |
---|---|
allocate | Asigna memoria usando el asignador Outer . |
construct | Construye un objeto . |
deallocate | Desasigna los objetos mediante el asignador exterior. |
destroy | Destruye un objeto especificado. |
inner_allocator | Recupera una referencia al objeto almacenado de tipo inner_allocator_type . |
max_size | Determina el número máximo de objetos que el asignador exterior puede asignar. |
outer_allocator | Recupera una referencia al objeto almacenado de tipo outer_allocator_type . |
select_on_container_copy_construction | Crea un nuevo objeto scoped_allocator_adaptor con cada objeto de asignador almacenado inicializado mediante una llamada a select_on_container_copy_construction para cada asignador correspondiente. |
Operadores
Operador | Descripción |
---|---|
operator= | |
operator== | |
operator!= |
Requisitos
Encabezado:<scoped_allocator>
Espacio de nombres: std
scoped_allocator_adaptor::allocate
Asigna memoria usando el asignador Outer
.
pointer allocate(size_type count);pointer allocate(size_type count, const_void_pointer hint);
Parámetros
count
Número de elementos para los que se va a asignar suficiente espacio de almacenamiento.
Sugerencia:
Un puntero que es posible que ayude el objeto de asignador ubicando la dirección de un objeto asignado antes de la solicitud.
Valor devuelto
La primera función miembro devuelve Outer_traits::allocate(outer_allocator(), count)
. La segunda función miembro devuelve Outer_traits::allocate(outer_allocator(), count, hint)
.
scoped_allocator_adaptor::construct
Construye un 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
Un puntero a la ubicación de memoria donde se va a crear el objeto.
args
Una lista de argumentos.
first
Un objeto del primer tipo en un par.
second
Un objeto del segundo tipo en un par.
right
Un objeto existente para mover o copiar.
Comentarios
El primer método construye el objeto en ptr mediante una llamada a Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...)
, donde xargs...
es uno de los siguientes.
Si
uses_allocator<Ty, inner_allocator_type>
es falsoxargs...
esargs...
.Si
uses_allocator<Ty, inner_allocator_type>
es verdadero yis_constructible<Ty, allocator_arg_t, inner_allocator_type, args...>
es verdadero, entoncesxargs...
esallocator_arg, inner_allocator(), args...
.Si
uses_allocator<Ty, inner_allocator_type>
es verdadero yis_constructible<Ty, args..., inner_allocator()>
es verdadero, entoncesxargs...
esargs..., inner_allocator()
.
El segundo método construye el objeto de par en ptr mediante una llamada a Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...)
, donde xargs...
es first...
modificado como en la lista anterior, y Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...)
, donde xargs...
es second...
modificado como en la lista anterior.
El tercer método se comporta igual que this->construct(ptr, piecewise_construct, tuple<>, tuple<>)
.
El cuarto método se comporta igual que this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second))
.
El quinto método se comporta igual que this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second))
.
El sexto método se comporta igual 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
Desasigna los objetos mediante el asignador exterior.
void deallocate(pointer ptr, size_type count);
Parámetros
ptr
Un puntero a la ubicación inicial de los objetos que se van a desasignar.
count
Número de objetos que se van a desasignar.
scoped_allocator_adaptor::destroy
Destruye un objeto especificado.
template <class Ty>
void destroy(Ty* ptr)
Parámetros
ptr
Un puntero al objeto que se va a destruir.
Valor devuelto
Outermost_traits::destroy(OUTERMOST(*this), ptr)
scoped_allocator_adaptor::inner_allocator
Recupera una referencia al objeto almacenado de tipo inner_allocator_type
.
inner_allocator_type& inner_allocator() noexcept;
const inner_allocator_type& inner_allocator() const noexcept;
Valor devuelto
Una referencia al objeto almacenado de tipo inner_allocator_type
.
scoped_allocator_adaptor::max_size
Determina el número máximo de objetos que el asignador exterior puede asignar.
size_type max_size();
Valor devuelto
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 una referencia al objeto almacenado de tipo outer_allocator_type
.
outer_allocator_type& outer_allocator() noexcept;
const outer_allocator_type& outer_allocator() const noexcept;
Valor devuelto
Una referencia al objeto almacenado de tipo outer_allocator_type
.
scoped_allocator_adaptor::rebind (Struct)
Define el tipo Outer::rebind\<Other>::other
como 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; };
scoped_allocator_adaptor::scoped_allocator_adaptor (Constructor)
Construye un objeto scoped_allocator_adaptor
. También incluye un destructor.
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
right
Un scoped_allocator_adaptor
existente.
al
Un asignador existente que se usará como el asignador exterior.
rest
Una lista de asignadores que se usarán como los asignadores exteriores.
Comentarios
El primer constructor construye de manera predeterminada sus objetos de asignador almacenado. Cada uno de los tres constructores siguientes construye los objetos de asignador almacenado de los objetos correspondientes en right. El último constructor construye los objetos de asignador almacenado a partir de los argumentos correspondientes en la lista de argumentos.
scoped_allocator_adaptor::select_on_container_copy_construction
Crea un nuevo objeto scoped_allocator_adaptor
con cada objeto de asignador almacenado inicializado mediante una llamada a select_on_container_copy_construction
para cada asignador correspondiente.
scoped_allocator_adaptor select_on_container_copy_construction();
Valor devuelto
Este método devuelve eficazmente scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction())
. El resultado es un nuevo objeto scoped_allocator_adaptor
con cada objeto de asignador almacenado inicializado mediante una llamada a al.select_on_container_copy_construction()
para el correspondiente asignador al.