名前空間
変種
操作

std::allocator::allocate

提供: cppreference.com
< cpp‎ | memory‎ | allocator
 
 
動的メモリ管理
未初期化記憶域
(C++17)
ガベージコレクションサポート
その他
(C++20)
(C++11)
(C++11)
C のライブラリ
低水準のメモリ管理
 
 
pointer allocate( size_type n, const void * hint = 0 );
(1) (C++17以前)
T* allocate( std::size_t n, const void * hint);
(1) (C++17およびそれ以降)
(非推奨)
(C++20で削除)
(2)
T* allocate( std::size_t n );
(C++17およびそれ以降)
(C++20以前)
[[nodiscard]] T* allocate( std::size_t n );
(C++20およびそれ以降)

::operator new(std::size_t) または ::operator new(std::size_t, std::align_val_t) (C++17およびそれ以降) を呼ぶことによって n * sizeof(T) バイトの未初期化記憶域を確保しますが、それらの関数がいつどのように呼ばれるかは未規定です。 ポインタ hint は参照の局所性を提供するために使用することができます。 実装がサポートしている場合、アロケータは hint に可能な限り近い新しいメモリブロックの確保を試みます。

目次

[編集] 引数

n - 記憶域を確保するオブジェクト数
hint - 付近のメモリ位置を指すポインタ

[編集] 戻り値

T 型のオブジェクト n 個の配列を保持するのに十分な適切にアラインされたメモリブロックの最初のバイトを指すポインタ。

[編集] 例外

確保に失敗した場合は std::bad_alloc を投げます。

[編集] ノート

「いつどのように呼ばれるかは未規定」という文言は、 ::operator new の直接呼び出しに対してはできないヒープ確保の結合または最適化を標準ライブラリが行うことを可能とします。 例えば、これは libc++ ([1] および [2]) で実装されています。

[編集] 関連項目

[static]
アロケータを使用して未初期化記憶域を確保します
(std::allocator_traitsのパブリック静的メンバ関数) [edit]