Espacios de nombres
Variantes
Acciones

std::scoped_allocator_adaptor

De cppreference.com
< cpp‎ | memory
 
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
scoped_allocator_adaptor
(C++11)
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
 
Definido en el archivo de encabezado <scoped_allocator>
template< class OuterAlloc, class... InnerAlloc >
class scoped_allocator_adaptor : public OuterAlloc;
(desde C++11)

La plantilla de clase std::scoped_allocator_adaptor es un asignador que se puede utilizar con contenedores multinivel (vector de conjuntos de listas de tuplas de mapas, etc.). Se instancia con un tipo de asignador externo OuterAlloc y cero o más tipos de asignador interno InnerAlloc.... Un contenedor construido directamente con scoped_allocator_adaptor usa OuterAlloc para asignar sus elementos, pero si un elemento es en sí mismo un contenedor, usa el primer asignador interno. Los elementos de ese contenedor, si ellos mismos son contenedores, usan el segundo asignador interno, etc. Si hay más niveles en el contenedor que asignadores internos, el último asignador interno se reutiliza para todos los contenedores anidados posteriores.

El propósito de este adaptador es inicializar correctamente los asignadores con estado en contenedores anidados, como cuando todos los niveles de un contenedor anidado deben colocarse en el mismo segmento de memoria compartida. El constructor del adaptador toma los argumentos de todos los asignadores de la lista y cada contenedor anidado obtiene el estado de su asignador del adaptador según sea necesario.

Para el propósito de scoped_allocator_adaptor, si el próximo asignador interno es A, cualquier clase T para la cual std::uses_allocator<T, A>::value == true participa en la recursividad como si fuera un contenedor. Además, std::pair se trata como tal contenedor por sobrecargas específicas de scoped_allocator_adaptor::construct.

La implementación típica contiene una instancia de std::scoped_allocator_adaptor<InnerAllocs...> como un objeto miembro.

Contenido

[editar] Tipos miembro

Tipo Definición
outer_allocator_type OuterAlloc
inner_allocator_type scoped_allocator_adaptor<InnerAllocs...> o, si sizeof...(InnerAllocs) == 0, scoped_allocator_adaptor<OuterAlloc>
value_type std::allocator_traits<OuterAlloc>::value_type
size_type std::allocator_traits<OuterAlloc>::size_type
difference_type std::allocator_traits<OuterAlloc>::difference_type
pointer std::allocator_traits<OuterAlloc>::pointer
const_pointer std::allocator_traits<OuterAlloc>::const_pointer
void_pointer std::allocator_traits<OuterAlloc>::void_pointer
const_void_pointer std::allocator_traits<OuterAlloc>::const_void_pointer
propagate_on_container_copy_assignment
std::true_type si std::allocator_traits<A>::propagate_on_container_copy_assignment::value es true para al menos un asignador A entre OuterAlloc y InnerAlloc...
propagate_on_container_move_assignment
std::true_type si std::allocator_traits<A>::propagate_on_container_move_assignment::value es true para al menos un asignador A entre OuterAlloc y InnerAlloc...
propagate_on_container_swap
std::true_type si std::allocator_traits<A>::propagate_on_container_swap::value es true para al menos un asignador A entre OuterAlloc y InnerAlloc...
is_always_equal(C++17)
std::true_type si std::allocator_traits<A>::is_always_equal::value es true para todo asignador A entre OuterAlloc y InnerAlloc...
rebind
template< class T >
struct rebind {
    typedef scoped_allocator_adaptor<
        std::allocator_traits<OuterAlloc>::template rebind_alloc<T>, 
        InnerAllocs...
    > other;
};

[editar] Funciones miembro

crea una nueva instancia scoped_allocator_adaptor
Original:
creates a new scoped_allocator_adaptor instance
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública) [editar]
destructs una instancia scoped_allocator_adaptor
Original:
destructs a scoped_allocator_adaptor instance
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública) [editar]
Asigna un scoped_allocator_adaptor.
(función miembro pública) [editar]
obtiene una referencia inner_allocator
Original:
obtains an inner_allocator reference
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública) [editar]
obtiene una referencia outer_allocator
Original:
obtains an outer_allocator reference
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública) [editar]
asigna almacenamiento sin inicializar utilizando el asignador exterior
Original:
allocates uninitialized storage using the outer allocator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública) [editar]
asigna almacenamiento mediante el asignador exterior
Original:
allocates storage using the outer allocator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública) [editar]
returns the largest allocation size supported by the outer allocator
(función miembro pública) [editar]
construye un objeto de almacenamiento asignado, pasando el asignador interior a su constructor, si procede
Original:
constructs an object in allocated storage, passing the inner allocator to its constructor if appropriate
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública) [editar]
desrtucts un objeto de almacenamiento asignado
Original:
desrtucts an object in allocated storage
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública) [editar]
Copia el estado de scoped_allocator_adaptor y todos sus asignadores.
(función miembro pública) [editar]

[editar] Funciones no miembro

Compara dos instancias de scoped_allocator_adaptor.
(función miembro pública) [editar]

[editar] Guías de deducción(desde C++17)

[editar] Ejemplo

#include <vector>
#include <scoped_allocator>
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/allocators/adaptive_pool.hpp>
namespace bi = boost::interprocess;
template<class T> using alloc = bi::adaptive_pool<T,
                                    bi::managed_shared_memory::segment_manager>;
using ipc_row = std::vector<int, alloc<int>>;
using ipc_matrix = std::vector<ipc_row, std::scoped_allocator_adaptor<alloc<ipc_row>>>;
int main ()
{
   bi::managed_shared_memory s(bi::create_only, "Demo", 65536);
 
   // crea un vector de vectores en memoria compartida
   ipc_matrix v(s.get_segment_manager());
 
   // para todas estas adiciones, los vectores internos obtienen sus argumentos asignador
   // del scoped_allocator_adaptor externo del vector
   v.resize(1); v[0].push_back(1);
   v.emplace_back(2);
   std::vector<int> local_row = {1,2,3};
   v.emplace_back(local_row.begin(), local_row.end());
 
   bi::shared_memory_object::remove("Demo");
}


[editar] Véase también

Proporciona información sobre los tipos de asignadores.
(plantilla de clase) [editar]
Comprueba si el tipo especificado admite construcción con uso de asignador.
(plantilla de clase) [editar]
El asignador de memoria por defecto.
(plantilla de clase) [editar]