std::allocator::allocate
(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 )
|