std::allocator_traits<Alloc>::allocate
From cppreference.com
| ヘッダ <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 メンバー関数) |