std::allocator_traits<Alloc>::allocate_at_least
| 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
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[edit] Siehe auch
| (C++23) |
weist uninitialisierten Speicher zu, der mindestens so groß ist wie die angeforderte Größe (public member function of std::allocator<T>) |