Compartir a través de


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, entonces OUTERMOST(X) es OUTERMOST(X.outer_allocator()).

  • En caso contrario, OUTERMOST(X) es X.

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 falso xargs... es args....

  • Si uses_allocator<Ty, inner_allocator_type> es verdadero y is_constructible<Ty, allocator_arg_t, inner_allocator_type, args...> es verdadero, entonces xargs... es allocator_arg, inner_allocator(), args....

  • Si uses_allocator<Ty, inner_allocator_type> es verdadero y is_constructible<Ty, args..., inner_allocator()> es verdadero, entonces xargs... es args..., 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.

Consulte también

Referencia de archivos de encabezado