Namensräume
Varianten
Aktionen

std::allocator_traits<Alloc>::allocate_at_least

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
 
 
static constexpr std::allocation_result<pointer, size_type>
    allocate_at_least( Alloc& a, size_type n );
(seit C++23)

allocate_at_least ruft a.allocate_at_least(n) auf und gibt dessen Ergebnis zurück, falls der Aufruf wohlgeformt ist, andernfalls ist er äquivalent zu return {a.allocate(n), n};.

allocator_at_least versucht, Speicherplatz für mindestens n value_type Objekte zu allozieren und stellt einen Fallback-Mechanismus bereit, der Speicherplatz für exakt n Objekte alloziiert.

Inhalt

[edit] Parameter

a - ein Allocator, der zur Allokation von Speicherplatz verwendet wird
n - die Untergrenze der Anzahl von Objekten, für die Speicherplatz alloziiert werden soll

[edit] Rückgabewert

a.allocate_at_least(n), falls diese wohlgeformt ist.

Andernfalls std::allocation_result<pointer, size_type>{a.allocate(n), n}.

[edit] Ausnahmen

Wirft das, was und wann die ausgewählte Allokationsfunktion wirft.

[edit] Anmerkungen

Die allocate_at_least Member-Funktion von Allocator Typen sind hauptsächlich für kontigue Container, z.B. std::vector und std::basic_string, vorgesehen, um Reallokationen zu reduzieren, indem ihre Kapazität der tatsächlich alloziierten Größe entspricht, wenn möglich. Da allocate_at_least einen Fallback-Mechanismus bereitstellt, kann sie direkt verwendet werden, wo es angebracht ist.

Gegeben sei ein Allocator-Objekt a vom Typ Alloc, sei result der von std::allocator_traits<Alloc>::allocate_at_least(a, n) zurückgegebene Wert, der Speicherplatz muss durch a.deallocate(result.ptr, m) (typischerweise aufgerufen über std::allocator_traits<Alloc>::deallocate(a, result.ptr, m)) freigegeben werden, um Speicherlecks zu vermeiden.

Das Argument m, das bei der Deallokation verwendet wird, muss nicht kleiner als n und nicht größer als result.count sein, andernfalls ist das Verhalten undefiniert. Beachten Sie, dass n immer gleich result.count ist, wenn der Allocator allocate_at_least nicht bereitstellt, was bedeutet, dass m gleich n sein muss.

Feature-Test-Makro Wert Std Feature
__cpp_lib_allocate_at_least 202302L (C++23) allocate_at_least usw.

[edit] Beispiel

[edit] Siehe auch

weist uninitialisierten Speicher zu, der mindestens so groß ist wie die angeforderte Größe
(public member function of std::allocator<T>) [edit]