Namensräume
Varianten
Aktionen

std::allocator_traits<Alloc>::allocate

Von cppreference.com
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
 
Definiert in Header <memory>
static pointer allocate( Alloc& a, size_type n );
(1) (seit C++11)
(constexpr seit C++20)
static pointer allocate( Alloc& a, size_type n, const_void_pointer hint );
(2) (seit C++11)
(constexpr seit C++20)

Verwendet den Allokator a, um n * sizeof(Alloc::value_type) Bytes uninitialisierten Speicher zuzuweisen. Im Speicher wird ein Array vom Typ Alloc::value_type[n] erstellt, aber keines seiner Elemente wird konstruiert.

1) Ruft a.allocate(n) auf.
2) Übergeben zusätzlich den Hinweis auf die Speicherlokalität hint. Ruft a.allocate(n, hint) auf, falls möglich. Falls nicht möglich (z.B. wenn a keine Memberfunktion `allocate` mit zwei Argumenten besitzt), ruft a.allocate(n) auf.

Inhalt

[bearbeiten] Parameter

a - zu verwendender Allokator
n - die Anzahl der Objekte, für die Speicher allokiert werden soll
hint - Zeiger auf eine nahegelegene Speicheradresse

[bearbeiten] Rückgabewert

Der von dem Aufruf von a.allocate(n) zurückgegebene Zeiger.

[bearbeiten] Anmerkungen

Bis P0593R6 musste `Alloc::allocate` kein Array-Objekt erstellen, was die Verwendung von Nicht-Standard-Allokatoren für std::vector und einige andere Container gemäß einer strengen Auslegung der Kernsprachenspezifikation nicht gut definiert machte.

Nach dem Aufruf von `allocate` und vor der Konstruktion von Elementen ist die Zeigerarithmetik von Alloc::value_type* innerhalb des zugewiesenen Arrays wohldefiniert. Das Verhalten ist jedoch undefiniert, wenn auf Elemente zugegriffen wird.

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

alloziiert uninitialisierten Speicher
(public member function of std::allocator<T>) [bearbeiten]