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 ) ;
(C++23以降)

allocate_at_least a. allocate_at_least ( n ) を呼び出し、その呼び出しが適切な形式であればその結果を返します。そうでない場合、これは return { a. allocate ( n ) , n } ; と等価です。

allocator_at_least は少なくとも n value_type オブジェクト分のストレージを確保しようと試み、正確に n オブジェクト分のストレージを確保するフォールバック機構を提供します。

目次

パラメータ

a - ストレージ割り当てに使用されるアロケータ
n - ストレージを割り当てるオブジェクト数の下限

戻り値

a. allocate_at_least ( n ) それが適切に形成されている場合。

それ以外の場合、 std:: allocation_result < pointer, size_type > { a. allocate ( n ) , n }

例外

選択されたアロケート関数が何をいつスローするか。

注記

allocate_at_least メンバ関数は、 Allocator 型において主に連続コンテナ(例えば std::vector std::basic_string )向けに提供され、実際に割り当てられたサイズに容量を合わせることで再割り当てを削減します。 allocate_at_least はフォールバック機構を提供するため、適切な場面で直接使用できます。

Alloc のアロケータオブジェクト a が与えられたとき、 std:: allocator_traits < Alloc > :: allocate_at_least ( a, n ) から返される値を result とすると、メモリリークを避けるため、ストレージは a. deallocate ( result. ptr , m ) によって(通常は std:: allocator_traits < Alloc > :: deallocate ( a, result. ptr , m ) を通じて呼び出される)解放されるべきです。

解放時に使用される引数 m は、 n 以上かつ result. count 以下でなければなりません。そうでない場合、動作は未定義です。 n は常に result. count と等しいことに注意してください。これは、アロケータが allocate_at_least を提供しない場合、 m n と等しくなければならないことを意味します。

機能テスト マクロ 標準 機能
__cpp_lib_allocate_at_least 202302L (C++23) allocate_at_least など

関連項目

要求されたサイズ以上の未初期化ストレージを割り当てる
( std::allocator<T> の公開メンバ関数)