Espacios de nombres
Variantes
Acciones

std::allocator::allocate

De cppreference.com
< cpp‎ | memory‎ | allocator
 
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
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)
 
std::allocator
Funciones miembro
(hasta C++20)
allocator::allocate
(hasta C++20)
(hasta C++20)
Funciones no miembro
 
(1)
pointer allocate( size_type n, const void * hint = 0 );
(hasta C++17)
T* allocate( std::size_t n, const void * hint);
(desde C++17)
(en desuso)
(eliminado en C++20)
(2)
T* allocate( std::size_t n );
(desde C++17)
(hasta C++20)
[[nodiscard]] constexpr T* allocate( std::size_t n );
(desde C++20)

Asigna n * sizeof(T) bytes de almacenamiento no inicializado llamando a ::operator new(std::size_t) u ::operator new(std::size_t, std::align_val_t) (desde C++17), pero no se especifica cuándo y cómo se llama a esta función. El puntero hint se puede usar para proporcionar la localidad de referencia: el asignador, si es compatible con la implementación, intentará asignar el nuevo bloque de memoria lo más cerca posible de hint.

Luego, esta función crea un array de tipo T[n] en el almacenamiento y comienza su tiempo de vida, pero no inicia el tiempo de vida de ninguno de sus elementos.

El uso de esta función está mal formado si T es un tipo incompleto.

Para usar esta función en una expresión constante, el almacenamiento asignado debe desasignarse dentro de la evaluación de la misma expresión.

(desde C++20)

Contenido

[editar] Parámetros

n - El número de objetos para los que asignar almacenamiento.
hint - Puntero a una ubicación de memoria cercana.

[editar] Valor de retorno

Puntero al primer elemento de un array de n objetos de tipo T cuyos elementos aún no se han construido.

[editar] Excepciones

Lanza std::bad_array_new_length si std::numeric_limits<std::size_t>::max() / sizeof(T) < n.

(desde C++11)

Lanza std::bad_alloc si la asignación de memoria no tiene éxito.

[editar] Notas

La redacción "no se especifica cuándo y cómo" hace posible combinar u optimizar asignaciones en el montículo de memoria hechas por los contenedores de la biblioteca estándar, aunque tales optimizaciones no están permitidas para llamadas directas a ::operator new. Por ejemplo, esto se implementa por libc++ ([1] y [2]).

Después de llamar a allocate y antes de la construcción de elementos, la aritmética de punteros de T* está bien definida dentro del array asignado, pero el comportamiento no está definido si se accede a los elementos.

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3190 C++11 allocate podría asignar almacenamiento del tamaño equivocado. En su lugar lanza bad_array_new_length.

[editar] Véase también

[estático]
asigna almacenamiento sin inicializar utilizando el asignador
Original:
allocates uninitialized storage using the 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 estática pública de std::allocator_traits) [editar]