名前空間
変種
操作

std::allocator_traits<Alloc>::allocate

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まで*)
明示的な生存期間管理
 
 
ヘッダ <memory> で定義
static pointer allocate( Alloc& a, size_type n );
(1) (C++11以降)
(C++20 以降 constexpr)
static pointer allocate( Alloc& a, size_type n, const_void_pointer hint );
(2) (C++11以降)
(C++20 以降 constexpr)

a というアロケータを使用して、n * sizeof(Alloc::value_type) バイトの初期化されていないストレージを確保します。ストレージ内には Alloc::value_type[n] 型の配列が作成されますが、その要素は一切構築されません。

1) a.allocate(n) を呼び出します。
2) さらに、メモリ局所性ヒント hint を渡します。可能であれば、a.allocate(n, hint) を呼び出します。不可能な場合(例:a が2引数メンバ関数 allocate を持たない場合)は、a.allocate(n) を呼び出します。

目次

[編集] パラメータ

a - 使用するアロケータ
n - 割り当て対象のオブジェクト数
hint - 近くのメモリ位置へのポインタ

[編集] 返り値

a.allocate(n) の呼び出しによって返されたポインタ。

[編集] 注記

Alloc::allocate は、P0593R6 まで配列オブジェクトの作成を要求されていませんでした。これにより、厳密なコア言語仕様の解釈によれば、std::vector やその他のコンテナでデフォルト以外のアロケータを使用することは、適切に定義されていませんでした。

allocate を呼び出し、要素の構築が行われる前は、Alloc::value_type* のポインタ演算は確保された配列内で適切に定義されますが、要素にアクセスすると未定義の動作になります。

[編集]

[編集] 関連項目

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