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 ) ;
(bis C++17)
T * allocate ( std:: size_t n, const void * hint ) ;
(seit C++17)
(veraltet)
(entfernt in C++20)
(2)
T * allocate ( std:: size_t n ) ;
(seit C++17)
(bis C++20)
constexpr T * allocate ( std:: size_t n ) ;
(seit C++20)

Weist n * sizeof ( T ) Bytes nicht initialisierten Speichers zu, indem :: operator new ( std:: size_t ) oder :: operator new ( std:: size_t , std:: align_val_t ) (seit C++17) aufgerufen wird, jedoch ist nicht spezifiziert, wann und wie diese Funktion aufgerufen wird. Der Zeiger hint kann verwendet werden, um Lokalität der Referenz zu bieten: Der Allokator wird, falls durch die Implementierung unterstützt, versuchen, den neuen Speicherblock so nah wie möglich an hint zu allozieren.

Dann erstellt diese Funktion ein Array vom Typ T[n] im Speicher und beginnt dessen Lebensdauer, startet jedoch nicht die Lebensdauer eines seiner Elemente.

Die Verwendung dieser Funktion ist fehlerhaft, wenn T ein incomplete type ist.

Um diese Funktion in einem konstanten Ausdruck zu verwenden, muss der allokierte Speicher innerhalb der Auswertung desselben Ausdrucks freigegeben werden.

(since C++20)

Inhaltsverzeichnis

Parameter

n - die Anzahl der Objekte, für die Speicherplatz allokiert werden soll
hint - Zeiger auf einen nahegelegenen Speicherbereich

Rückgabewert

Zeiger auf das erste Element eines Arrays von n Objekten des Typs T , deren Elemente noch nicht konstruiert wurden.

Exceptions

Wirft std::bad_array_new_length falls std:: numeric_limits < std:: size_t > :: max ( ) / sizeof ( T ) < n .

(seit C++11)

Wirft std::bad_alloc falls die Allokation fehlschlägt.

Hinweise

Die Formulierung "unspecified when and how" ermöglicht es, Heap-Allokationen zu kombinieren oder wegzuoptimieren , die von den Standardbibliothek-Containern durchgeführt werden, selbst wenn solche Optimierungen für direkte Aufrufe von ::operator new nicht erlaubt sind. Zum Beispiel wird dies von libc++ implementiert ( [1] und [2] ).

Nach dem Aufruf von allocate() und vor der Konstruktion der Elemente ist die Zeigerarithmetik von T* innerhalb des allokierten Arrays wohldefiniert, aber das Verhalten ist undefiniert, wenn auf Elemente zugegriffen wird.

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 578 C++98 hint musste entweder 0 oder ein
zuvor von allocate() zurückgegebener Zeiger sein,
der noch nicht an deallocate() übergeben wurde
nicht erforderlich
LWG 3190 C++11 allocate() könnte Speicher falscher Größe allozieren wirft stattdessen std::bad_array_new_length

Siehe auch

[static]
weist nicht initialisierten Speicher mit dem Allokator zu
(öffentliche statische Mitgliedsfunktion von std::allocator_traits<Alloc> )