<memory>
ヘッダでは、メモリアロケータ、未初期化領域に関する関数群、スマートポインタ、ガベージコレクションを作るためのユーティリティ関数といった、メモリを扱うための機能を定義する。
このヘッダでは、以下の標準ヘッダをインクルードする:
<compare>
(C++20)
メモリアロケータ
名前 | 説明 | 対応バージョン |
---|---|---|
allocator |
メモリアロケータの標準実装(class template) | |
allocator_traits |
アロケータクラスへの間接的なアクセス(class template) | C++11 |
allocation_result |
allocate_at_least() 関数の戻り値型 |
C++23 |
allocator_arg_t |
アロケータを引数として渡す際の、オーバーロード解決のためのタグ(class) | C++11 |
allocator_arg |
アロケータを引数として渡す際の、オーバーロード解決のためのタグ(constant value) | C++11 |
uses_allocator |
型T がアロケータを使用するか調べる |
C++11 |
uses_allocator_construction_args |
uses-allocator 構築のためのコンストラクタ引数を tuple 型にして返す |
C++20 |
make_obj_using_allocator |
uses-allocator 構築する | C++20 |
uninitialized_construct_using_allocator |
指定された領域に uses-allocator 構築する | C++20 |
メモリ特化のコンセプト
名前 | 説明 | 対応バージョン |
---|---|---|
no-throw-input-iterator |
各操作で例外送出をしない説明用の入力イテレータ (concept) | C++20 |
no-throw-forward-iterator |
各操作で例外送出をしない説明用の前方向イテレータ (concept) | C++20 |
no-throw-sentinel |
各操作で例外送出をしない説明用の番兵 (concept) | C++20 |
no-throw-input-range |
各操作で例外送出をしない入力Range (concept) | C++20 |
no-throw-forward-range |
各操作で例外送出をしない前方向Range (concept) | C++20 |
未初期化領域に対する操作
名前 | 説明 | 対応バージョン |
---|---|---|
uninitialized_default_construct |
未初期化領域の範囲の各要素をデフォルト構築する(function template) | C++17 |
uninitialized_default_construct_n |
未初期化領域の範囲のうち、先頭N 個の要素をデフォルト構築する(function template) |
C++17 |
uninitialized_value_construct |
未初期化領域の範囲の各要素配置を値構築する(function template) | C++17 |
uninitialized_value_construct_n |
未初期化領域の範囲のうち、先頭N 個の要素を値構築する(function template) |
C++17 |
uninitialized_copy |
未初期化領域の範囲を配置new で初期化してコピー出力する(function template) |
|
uninitialized_copy_n |
未初期化領域の範囲のうち、先頭N 個の要素を配置new で初期化してコピー出力する(function template) |
C++11 |
uninitialized_move |
未初期化領域の範囲を配置new で初期化してムーブ出力する(function template) |
|
uninitialized_move_n |
未初期化領域の範囲のうち、先頭N 個の要素を配置new で初期化してムーブ出力する(function template) |
C++11 |
uninitialized_fill |
未初期化領域の範囲を、指定された値で配置new する(function template) |
|
uninitialized_fill_n |
未初期化領域の範囲のうち、先頭N 個の要素を指定された値で配置new する(function template) |
|
construct_at |
コンストラクタを呼び出す(function template) | C++20 |
destroy_at |
デストラクタを呼び出す(function template) | C++17 |
destroy |
範囲の各要素に対してデストラクタを呼び出す(function template) | C++17 |
destroy_n |
範囲のうち、先頭N 個の要素に対してデストラクタを呼び出す(function template) |
C++17 |
ranges::uninitialized_default_construct |
未初期化領域の範囲の各要素をデフォルト構築する(function template) | C++20 |
ranges::uninitialized_default_construct_n |
未初期化領域の範囲のうち、先頭N 個の要素をデフォルト構築する(function template) |
C++20 |
ranges::uninitialized_value_construct |
未初期化領域の範囲の各要素配置を値構築する(function template) | C++20 |
ranges::uninitialized_value_construct_n |
未初期化領域の範囲のうち、先頭N 個の要素を値構築する(function template) |
C++20 |
ranges::uninitialized_copy |
未初期化領域の範囲を配置new で初期化してコピー出力する(function template) |
C++20 |
ranges::uninitialized_copy_n |
未初期化領域の範囲のうち、先頭N 個の要素を配置new で初期化してコピー出力する(function template) |
C++20 |
ranges::uninitialized_move |
未初期化領域の範囲を配置new で初期化してムーブ出力する(function template) |
C++20 |
ranges::uninitialized_move_n |
未初期化領域の範囲のうち、先頭N 個の要素を配置new で初期化してムーブ出力する(function template) |
C++20 |
ranges::uninitialized_fill |
未初期化領域の範囲を、指定された値で配置new する(function template) |
C++20 |
ranges::uninitialized_fill_n |
未初期化領域の範囲のうち、先頭N 個の要素を指定された値で配置new する(function template) |
C++20 |
ranges::construct_at |
コンストラクタを呼び出す(function template) | C++20 |
ranges::destroy_at |
デストラクタを呼び出す(function template) | C++20 |
ranges::destroy |
範囲の各要素に対してデストラクタを呼び出す(function template) | C++20 |
ranges::destroy_n |
範囲のうち、先頭N 個の要素に対してデストラクタを呼び出す(function template) |
C++20 |
raw_storage_iterator |
未初期化領域に書き込むための出力イテレータ(class template) | C++17から非推奨 C++20で削除 |
get_temporary_buffer |
短期的なメモリ領域を確保する(function template) | C++17から非推奨 C++20で削除 |
return_temporary_buffer |
get_temporary_buffer() で確保された領域を解放する(function) |
C++17から非推奨 C++20で削除 |
スマートポインタ
名前 | 説明 | 対応バージョン |
---|---|---|
shared_ptr |
共有方式スマートポインタ(class template) | C++11 |
make_shared |
shared_ptr を構築するヘルパ関数(function template) |
C++11 |
make_shared_for_overwrite |
shared_ptr を構築するヘルパ関数(function template) |
C++20 |
allocate_shared |
アロケータを指定してshared_ptr を構築するヘルパ関数(function template) |
C++11 |
allocate_shared_for_overwrite |
アロケータを指定してshared_ptr を構築するヘルパ関数(function template) |
C++20 |
enable_shared_from_this |
this を指すshared_ptr を可能にする(class template) |
C++11 |
weak_ptr |
shared_ptr のインスタンス監視(class template) |
C++11 |
bad_weak_ptr |
weak_ptr から投げられる例外クラス(class template) |
C++11 |
owner_less |
所有権ベースの小なり比較(class template) | C++11 |
unique_ptr |
専有方式スマートポインタ(class template) | C++11 |
make_unique |
unique_ptr を構築するヘルパ関数(function template) |
C++14 |
make_unique_for_overwrite |
unique_ptr を構築するヘルパ関数(function template) |
C++20 |
default_delete |
unique_ptr のデフォルトの削除子(class template) |
C++11 |
auto_ptr |
古い専有方式スマートポインタ(class template) | C++11から非推奨 C++17で削除 |
スマートポインタアダプタ
名前 | 説明 | 対応バージョン |
---|---|---|
out_ptr_t |
スマートポインタへの出力サポート(class template) | C++23 |
out_ptr |
スマートポインタへの出力サポートヘルパ関数(function template) | C++23 |
inout_ptr_t |
スマートポインタへの入出力サポート(class template) | C++23 |
inout_ptr |
スマートポインタへの入出力サポートヘルパ関数(function template) | C++23 |
スマートポインタのアトミック操作
名前 | 説明 | 対応バージョン |
---|---|---|
template<class T> struct atomic |
atomic クラスの先行宣言 (class template) |
C++20 |
template<class T> struct atomic<shared_ptr<T>>; |
atomic クラスのshared_ptr に対する特殊化 (class template) |
C++20 |
template<class T> struct atomic<weak_ptr<T>>; |
atomic クラスのweak_ptr に対する特殊化 (class template) |
C++20 |
atomic_is_lock_free |
shared_ptr に対するアトミック操作がロックフリーに振る舞うことができるかを調べる (function template) |
C++11 C++20で非推奨 |
atomic_load |
shared_ptr の値をアトミックに読み込む (function template) |
C++11 C++20で非推奨 |
atomic_load_explicit |
メモリオーダーを指定して、shared_ptr の値をアトミックに読み込む (function template) |
C++11 C++20で非推奨 |
atomic_store |
shared_ptr 値をアトミックに書き込む (function template) |
C++11 C++20で非推奨 |
atomic_store_explicit |
メモリオーダーを指定して、shared_ptr の値をアトミックに書き込む (function template) |
C++11 C++20で非推奨 |
atomic_exchange |
shared_ptr の値をアトミックに入れ替える (function template) |
C++11 C++20で非推奨 |
atomic_exchange_explicit |
メモリオーダーを指定して、shared_ptr の値をアトミックに入れ替える (function template) |
C++11 C++20で非推奨 |
atomic_compare_exchange_weak |
弱い比較でshared_ptr の値の入れ替えをアトミックに行う (function template) |
C++11 C++20で非推奨 |
atomic_compare_exchange_strong |
強い比較でshared_ptr の値の入れ替えをアトミックに行う (function template) |
C++11 C++20で非推奨 |
atomic_compare_exchange_weak_explicit |
弱い比較でメモリオーダーを指定して、shared_ptr の値の入れ替えをアトミックに行う (function template) |
C++11 C++20で非推奨 |
atomic_compare_exchange_strong_explicit |
強い比較でメモリオーダーを指定して、shared_ptr の値の入れ替えをアトミックに行う (function template) |
C++11 C++20で非推奨 |
ガベージコレクション支援(C++23で削除)
名前 | 説明 | 対応バージョン |
---|---|---|
pointer_safety |
ポインタ安全性について実装/挙動を示す列挙型(enum class) | C++11 C++23で削除 |
get_pointer_safety |
処理系の、ポインタ安全性についての実装/挙動を取得する(function) | C++11 C++23で削除 |
declare_reachable |
ポインタが到達可能であることを宣言する(function) | C++11 C++23で削除 |
undeclare_reachable |
ポインタが到達可能であるという宣言を削除する(function template) | C++11 C++23で削除 |
declare_no_pointers |
指定された範囲のポインタが、追跡可能ではないことを宣言する(function) | C++11 C++23で削除 |
undeclare_no_pointers |
declare_no_pointers で宣言された範囲を無効化する(function) |
C++11 C++23で削除 |
ポインタのユーティリティ
名前 | 説明 | 対応バージョン |
---|---|---|
pointer_traits |
ポインタの型特性(class template) | C++11 |
to_address |
ポインタと見なせるオブジェクトからアドレスを取得する (function template) | C++20 |
addressof |
変数のアドレスを必ず取得する(function template) | C++11 |
align |
アライメント調整された領域を得る(function) | C++11 |
assume_aligned |
コンパイラへアライメントのヒントを与える(function template) | C++20 |