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) |
Parámetros
| n | - | El número de objetos para los que asignar almacenamiento. |
| hint | - | Puntero a una ubicación de memoria cercana. |
Valor de retorno
Puntero al primer elemento de un array de n objetos de tipo T cuyos elementos aún no se han construido.
Excepciones
|
Lanza std::bad_array_new_length si |
(desde C++11) |
Lanza std::bad_alloc si la asignación de memoria no tiene éxito.
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.
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.
|
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)
|