std::allocator<T>:: allocate
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(until C++20)
|
||||
|
allocator::allocate
|
||||
|
(C++23)
|
||||
|
(until C++20)
|
||||
|
(until C++20)
|
||||
|
(until C++20)
|
||||
| Non-member functions | ||||
|
(until C++20)
|
| (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>
)
|