Namespaces
Variants

std::allocator<T>:: allocate

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(1)
pointer allocate ( size_type n, const void * hint = 0 ) ;
(jusqu'en C++17)
T * allocate ( std:: size_t n, const void * hint ) ;
(depuis C++17)
(obsolète)
(supprimé en C++20)
(2)
T * allocate ( std:: size_t n ) ;
(depuis C++17)
(jusqu'en C++20)
constexpr T * allocate ( std:: size_t n ) ;
(depuis C++20)

Alloue n * sizeof ( T ) octets de stockage non initialisé en appelant :: operator new ( std:: size_t ) ou :: operator new ( std:: size_t , std:: align_val_t ) (depuis C++17) , mais il n'est pas spécifié quand et comment cette fonction est appelée. Le pointeur hint peut être utilisé pour fournir une localité de référence : l'allocateur, s'il est pris en charge par l'implémentation, tentera d'allouer le nouveau bloc de mémoire aussi près que possible de hint .

Ensuite, cette fonction crée un tableau de type T[n] dans le stockage et commence sa durée de vie, mais ne commence pas la durée de vie d'aucun de ses éléments.

L'utilisation de cette fonction est mal formée si T est un type incomplet .

Pour utiliser cette fonction dans une expression constante, la mémoire allouée doit être désallouée lors de l'évaluation de la même expression.

(depuis C++20)

Table des matières

Paramètres

n - le nombre d'objets pour lesquels allouer de la mémoire
hint - pointeur vers un emplacement mémoire proche

Valeur de retour

Pointeur vers le premier élément d'un tableau de n objets de type T dont les éléments n'ont pas encore été construits.

Exceptions

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

(depuis C++11)

Lève std::bad_alloc si l'allocation échoue.

Notes

La formulation « non spécifiée quand et comment » permet de combiner ou optimiser les allocations de tas effectuées par les conteneurs de la bibliothèque standard, même si de telles optimisations sont interdites pour les appels directs à ::operator new . Par exemple, cela est implémenté par libc++ ( [1] et [2] ).

Après l'appel de allocate() et avant la construction des éléments, l'arithmétique des pointeurs de T* est bien définie au sein du tableau alloué, mais le comportement est indéfini si les éléments sont accédés.

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 578 C++98 hint devait être soit 0 soit un
pointeur précédemment retourné par allocate()
et non encore passé à deallocate()
non requis
LWG 3190 C++11 allocate() pouvait allouer une mémoire de taille incorrecte lève std::bad_array_new_length à la place

Voir aussi

[static]
alloue de la mémoire non initialisée en utilisant l'allocateur
(fonction membre publique statique de std::allocator_traits<Alloc> )