名前空間
変種
操作

std::allocator_traits<Alloc>::allocate_at_least

From cppreference.com
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(C++17)
(C++17)
(C++17)
制約付き未初期化
メモリアルゴリズム
Cライブラリ

アロケータ
メモリリソース
ガベージコレクションのサポート
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
未初期化ストレージ
(C++20まで*)
(C++20まで*)
明示的な生存期間管理
 
 
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}

[編集] 例外

選択された割り当て関数がスローする例外と同じものをスローします。

[編集] 注釈

Allocator 型の allocate_at_least メンバ関数は、主に連続コンテナ(例: std::vector および std::basic_string)のために提供されており、可能であれば容量を実際に割り当てられたサイズに一致させることで、再割り当てを削減できるようにしています。allocate_at_least はフォールバックメカニズムを提供するため、適切であれば直接使用できます。

アロケータオブジェクト aAlloc 型である場合、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 以下である必要があります。それ以外の場合は、未定義の動作となります。アロケータが allocate_at_least を提供しない場合、n は常に result.count と等しくなるため、mn と等しくなる必要があることに注意してください。

機能テストマクロ 規格 機能
__cpp_lib_allocate_at_least 202302L (C++23) allocate_at_least など。

[編集]

[編集] 関連項目

要求されたサイズ以上の未初期化ストレージを割り当てる
(std::allocator<T> の public メンバ関数) [編集]
English 日本語 中文(简体) 中文(繁體)