メモリ管理ライブラリ
From cppreference.com
< cpp
目次 |
[編集] スマートポインタ (C++11 以降)
スマートポインタは、自動的で例外安全なオブジェクトの生存期間管理を可能にします。
| ヘッダ
<memory> で定義 | |
ポインタカテゴリ | |
| (C++11) |
オブジェクトの所有権を唯一のものとするセマンティクスを持つスマートポインタ (クラステンプレート) |
| (C++11) |
オブジェクトの所有権を共有するセマンティクスを持つスマートポインタ (クラステンプレート) |
| (C++11) |
std::shared_ptr によって管理されるオブジェクトへの弱い参照 (クラステンプレート) |
| (C++11で非推奨)(C++17で削除) |
厳密なオブジェクト所有権セマンティクスを持つスマートポインタ (クラステンプレート) |
ヘルパークラス | |
| (C++11) |
shared ポインタと weak ポインタの、所有者ベースの混合型の順序付けを提供します (クラステンプレート) |
| (C++26) |
shared ポインタと weak ポインタの、所有者ベースのハッシュ化を提供します (クラス) |
| (C++26) |
shared ポインタと weak ポインタの、所有者ベースの混合型の等価比較を提供します (クラス) |
| (C++11) |
オブジェクトが自身を参照する shared_ptr を作成できるようにします(クラステンプレート) |
| (C++11) |
すでに破棄されたオブジェクトを参照する weak_ptr にアクセスしたときにスローされる例外(クラス) |
| (C++11) |
unique_ptr のためのデフォルトデリータ (クラステンプレート) |
スマートポインタアダプタ (C++23 以降) | |
| (C++23) |
外部のポインタセッターと相互運用し、破棄時にスマートポインタをリセットします (クラステンプレート) |
| (C++23) |
関連付けられたスマートポインタとリセット引数を持つ out_ptr_t を作成します(関数テンプレート) |
| (C++23) |
外部のポインタセッターと相互運用し、スマートポインタから初期ポインタ値を取得し、破棄時にリセットします (クラステンプレート) |
| (C++23) |
関連付けられたスマートポインタとリセット引数を持つ inout_ptr_t を作成します(関数テンプレート) |
[編集] アロケータ
アロケータは、メモリ確保戦略をカプセル化するクラステンプレートです。これにより、ジェネリックコンテナはメモリ管理をデータ自体から切り離すことができます。
| ヘッダ
<memory> で定義 | |
| デフォルトアロケータ (クラステンプレート) | |
| (C++11) |
アロケータ型に関する情報を提供します (クラステンプレート) |
| (C++23) |
allocate_at_least によって割り当てられたストレージのアドレスと実際のサイズを記録します(クラステンプレート) |
| (C++11) |
アロケータ対応コンストラクタを選択するために使用されるタグ (タグ) |
| (C++11) |
指定された型が uses-allocator 構築をサポートしているかどうかをチェックします (クラステンプレート) |
| 与えられた型が必要とする uses-allocator 構築の種類に一致する引数リストを準備します (関数テンプレート) | |
| (C++20) |
uses-allocator 構築によって、与えられた型のオブジェクトを作成します (関数テンプレート) |
| uses-allocator 構築によって、指定されたメモリ位置に与えられた型のオブジェクトを作成します (関数テンプレート) | |
| ヘッダ
<scoped_allocator> で定義 | |
| (C++11) |
多階層コンテナのための多階層アロケータを実装します (クラステンプレート) |
| ヘッダ
<memory_resource> で定義 | |
| 名前空間
std::pmr で定義 | |
| (C++17) |
構築時に与えられた std::pmr::memory_resource に基づく実行時多態性をサポートするアロケータ (クラステンプレート) |
[編集] メモリリソース (C++17 以降)
メモリリソースは、std::pmr::polymorphic_allocator が使用できるメモリ確保戦略を実装します。
| ヘッダ
<memory_resource> で定義 | |
| 名前空間
std::pmr で定義 | |
| (C++17) |
メモリリソースをカプセル化するクラスのための抽象インターフェース (クラス) |
| (C++17) |
メモリの確保と解放にグローバルな operator new と operator delete を使用する、静的なプログラムワイドな std::pmr::memory_resource を返します (関数) |
| (C++17) |
一切確保を行わない静的な std::pmr::memory_resource を返します (関数) |
| (C++17) |
デフォルトの std::pmr::memory_resource を取得します (関数) |
| (C++17) |
デフォルトの std::pmr::memory_resource を設定します (関数) |
| (C++17) |
プールリソースのためのコンストラクタオプションのセット (クラス) |
| (C++17) |
異なるブロックサイズのプールでメモリ確保を管理するための、スレッドセーフな std::pmr::memory_resource (クラス) |
| (C++17) |
異なるブロックサイズのプールでメモリ確保を管理するための、スレッドアンセーフな std::pmr::memory_resource (クラス) |
| (C++17) |
リソースが破棄されたときにのみ確保されたメモリを解放する、特殊用途の std::pmr::memory_resource (クラス) |
[編集] 未初期化ストレージ (C++17 まで)
生のストレージを作成し、アクセスするためのいくつかのユーティリティが提供されています。
| ヘッダ
<memory> で定義 | |
| (C++17で非推奨)(C++20で削除) |
標準アルゴリズムが未初期化メモリに結果を格納できるようにするイテレータ (クラステンプレート) |
| (C++17で非推奨)(C++20で削除) |
未初期化ストレージを取得します (関数テンプレート) |
| (C++17で非推奨)(C++20で削除) |
未初期化ストレージを解放します (関数テンプレート) |
[編集] 未初期化メモリのアルゴリズム
| ヘッダ
<memory> で定義 | |
| オブジェクトの範囲を未初期化メモリ領域にコピーします (関数テンプレート) | |
| (C++11) |
指定された数のオブジェクトを未初期化メモリ領域にコピーします (関数テンプレート) |
| 範囲で定義された未初期化メモリ領域にオブジェクトをコピーします (関数テンプレート) | |
| 開始位置と個数で定義された未初期化メモリ領域にオブジェクトをコピーします (関数テンプレート) | |
| (C++17) |
オブジェクトの範囲を未初期化メモリ領域にムーブします (関数テンプレート) |
| (C++17) |
指定された数のオブジェクトを未初期化メモリ領域にムーブします (関数テンプレート) |
| 範囲で定義された未初期化メモリ領域に、デフォルト初期化によってオブジェクトを構築します (関数テンプレート) | |
| 開始位置と個数で定義された未初期化メモリ領域に、デフォルト初期化によってオブジェクトを構築します (関数テンプレート) | |
| 範囲で定義された未初期化メモリ領域に、値初期化によってオブジェクトを構築します (関数テンプレート) | |
| 開始位置と個数で定義された未初期化メモリ領域に、値初期化によってオブジェクトを構築します (関数テンプレート) | |
| (C++17) |
与えられたアドレスのオブジェクトを破棄します (関数テンプレート) |
| (C++17) |
オブジェクトの範囲を破棄します (関数テンプレート) |
| (C++17) |
範囲内の指定された数のオブジェクトを破棄します (関数テンプレート) |
| (C++20) |
与えられたアドレスにオブジェクトを作成します (関数テンプレート) |
[編集] 制約付き未初期化メモリアルゴリズム (C++20 以降)
C++20 は、範囲引数またはイテレータと番兵のペアを受け入れる制約付き未初期化メモリアルゴリズムを提供します。
| ヘッダ
<memory> で定義 | |
| 名前空間
std::ranges で定義 | |
| イテレータ、番兵、範囲に対する一部の操作が例外をスローしないことを指定します (説明専用コンセプト*) | |
| (C++20) |
オブジェクトの範囲を未初期化メモリ領域にコピーします (アルゴリズム関数オブジェクト) |
| (C++20) |
指定された数のオブジェクトを未初期化メモリ領域にコピーします (アルゴリズム関数オブジェクト) |
| (C++20) |
範囲で定義された未初期化メモリ領域にオブジェクトをコピーします (アルゴリズム関数オブジェクト) |
| (C++20) |
開始位置と個数で定義された未初期化メモリ領域にオブジェクトをコピーします (アルゴリズム関数オブジェクト) |
| (C++20) |
オブジェクトの範囲を未初期化メモリ領域にムーブします (アルゴリズム関数オブジェクト) |
| (C++20) |
指定された数のオブジェクトを未初期化メモリ領域にムーブします (アルゴリズム関数オブジェクト) |
| 範囲で定義された未初期化メモリ領域に、デフォルト初期化によってオブジェクトを構築します (アルゴリズム関数オブジェクト) | |
| 開始位置と個数で定義された未初期化メモリ領域に、デフォルト初期化によってオブジェクトを構築します (アルゴリズム関数オブジェクト) | |
| 範囲で定義された未初期化メモリ領域に、値初期化によってオブジェクトを構築します (アルゴリズム関数オブジェクト) | |
| 開始位置と個数で定義された未初期化メモリ領域に、値初期化によってオブジェクトを構築します (アルゴリズム関数オブジェクト) | |
| (C++20) |
与えられたアドレスのオブジェクトを破棄します (アルゴリズム関数オブジェクト) |
| (C++20) |
オブジェクトの範囲を破棄します (アルゴリズム関数オブジェクト) |
| (C++20) |
範囲内の指定された数のオブジェクトを破棄します (アルゴリズム関数オブジェクト) |
| (C++20) |
与えられたアドレスにオブジェクトを作成します (アルゴリズム関数オブジェクト) |
[編集] ガベージコレクタサポート (C++23 まで)
| ヘッダ
<memory> で定義 | |
| (C++11)(C++23で削除) |
オブジェクトがリサイクルできないことを宣言します (関数) |
| (C++11)(C++23で削除) |
オブジェクトがリサイクルできることを宣言します (関数テンプレート) |
| (C++11)(C++23で削除) |
メモリ領域が追跡可能なポインタを含まないことを宣言します (関数) |
| (C++11)(C++23で削除) |
std::declare_no_pointers の効果を取り消します (関数) |
| (C++11)(C++23で削除) |
ポインタ安全性モデルをリストアップします (enum) |
| (C++11)(C++23で削除) |
現在のポインタ安全性モデルを返します (関数) |
[編集] 明示的な生存期間管理 (C++23 以降)
| ヘッダ
<memory> で定義 | |
| オブジェクト表現を再利用して、与えられたストレージ内にオブジェクトを暗黙的に作成します (関数テンプレート) | |
[編集] その他
| ヘッダ
<memory> で定義 | |
| (C++11) |
ポインタライクな型に関する情報を提供します (クラステンプレート) |
| (C++20) |
ポインタライクな型から生のポインタを取得します (関数テンプレート) |
| (C++11) |
& 演算子がオーバーロードされていても、オブジェクトの実際のアドレスを取得します(関数テンプレート) |
| (C++11) |
バッファ内のポインタをアラインします (関数) |
| (C++20) |
ポインタがアラインされていることをコンパイラに伝えます (関数テンプレート) |
| (C++26) |
ポインタが、少なくとも指定された値のアライメントを持つオブジェクトを指しているかどうかをチェックします (関数テンプレート) |
[編集] 低レベルメモリ管理
operator new、operator delete、std::set_new_handler などを含みます。
| ヘッダ
<new> で定義 |
[編集] C スタイルのメモリ管理
std::malloc、std::free などを含みます。
| ヘッダ
<cstdlib> で定義 |