最終更新日時(UTC): 2025年05月28日 14時40分48秒
suomesta が更新

履歴 編集

<memory>

# memory

`<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で非推奨

## ポインタのユーティリティ

名前 | 説明 | 対応バージョン
--- | --- | ---
`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
`is_sufficiently_aligned` | ポインタのアライメントを判定する(function template) | C++26
`start_lifetime_as` | オブジェクトの生存期間を開始することを明示する(function template) | C++23
`start_lifetime_as_array` | 配列オブジェクトの生存期間を開始することを明示する(function template) | C++23

## ガベージコレクション支援（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で削除

## 参照

- N4190 Removing `auto_ptr`, `random_shuffle()`, And Old `<functional>` Stuff
- P0718R2 Revising `atomic_shared_ptr` for C++20
- P2051R0 C++ Standard Library Issues to be moved in Prague
- P2186R2 Removing Garbage Collection Support
- P1132R8 out_ptr - a scalable output pointer abstraction