Namespaces
Variants

std::allocator_traits<Alloc>:: allocate_at_least

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)
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 entspricht es return { a. allocate ( n ) , n } ; .

allocator_at_least versucht, Speicher für mindestens n value_type Objekte zu allozieren und bietet einen Fallback-Mechanismus, der Speicher für exakt n Objekte alloziert.

Inhaltsverzeichnis

Parameter

a - ein Allokator, der für die Zuweisung von Speicher verwendet wird
n - die Untergrenze der Anzahl von Objekten, für die Speicher zugewiesen werden soll

Rückgabewert

a. allocate_at_least ( n ) falls es wohlgeformt ist.

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

Exceptions

Wirft was und wann die ausgewählte Allokationsfunktion wirft.

Hinweise

Die allocate_at_least Memberfunktion von Allocator Typen wird hauptsächlich für kontinuierliche Container bereitgestellt, z.B. std::vector und std::basic_string , um Neuzuordnungen zu reduzieren, indem ihre Kapazität wenn möglich der tatsächlich zugewiesenen Größe angepasst wird. Da allocate_at_least einen Fallback-Mechanismus bereitstellt, kann es direkt an geeigneten Stellen verwendet werden.

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

Das Argument m , das bei der Freigabe verwendet wird, darf nicht kleiner sein als n und nicht größer als result. count , andernfalls ist das Verhalten undefiniert. Beachten Sie, dass n immer gleich result. count ist, wenn der Allokator kein allocate_at_least 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 etc.

Beispiel

Siehe auch

weist nicht initialisierten Speicher zu, der mindestens so groß wie die angeforderte Größe ist
(öffentliche Elementfunktion von std::allocator<T> )