Namespaces
Variants

Memory management library

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)

目次

スマートポインタ (C++11以降)

スマートポインタは、自動的かつ例外安全なオブジェクト寿命管理を実現します。

定義済みヘッダー <memory>
ポインタカテゴリ
(C++11)
ユニークなオブジェクト所有権セマンティクスを持つスマートポインタ
(クラステンプレート)
(C++11)
共有オブジェクト所有権セマンティクスを持つスマートポインタ
(クラステンプレート)
(C++11)
std::shared_ptr によって管理されるオブジェクトへの弱参照
(クラステンプレート)
(C++11で非推奨) (C++17で削除)
厳密なオブジェクト所有権セマンティクスを持つスマートポインタ
(クラステンプレート)
ヘルパークラス
(C++11)
共有ポインタと弱ポインタの混合型オーナーベース順序付けを提供
(クラステンプレート)
(C++26)
共有ポインタと弱ポインタのオーナーベースハッシュを提供
(クラス)
共有ポインタと弱ポインタの混合型オーナーベース等値比較を提供
(クラス)
オブジェクトが自身を参照する shared_ptr を作成できるようにする
(クラステンプレート)
既に破棄されたオブジェクトを参照する weak_ptr にアクセスしたときにスローされる例外
(クラス)
unique_ptr のデフォルトデリータ
(クラステンプレート)
スマートポインタアダプタ (C++23以降)
(C++23)
外部ポインタセッターと相互運用し、スマートポインタを破棄時にリセットする
(クラステンプレート)
(C++23)
関連するスマートポインタとリセット引数を持つ out_ptr_t を作成する
(関数テンプレート)
外部ポインタセッターと相互運用し、スマートポインタから初期ポインタ値を取得し、破棄時にリセットする
(クラステンプレート)
(C++23)
関連するスマートポインタとリセット引数を持つ inout_ptr_t を作成する
(関数テンプレート)

アロケータ

アロケータは、メモリ割り当て戦略をカプセル化するクラステンプレートです。これにより、ジェネリックコンテナはメモリ管理をデータ自体から分離することが可能になります。

ヘッダーで定義 <memory>
デフォルトアロケータ
(クラステンプレート)
アロケータ型に関する情報を提供する
(クラステンプレート)
allocate_at_least によって割り当てられたストレージのアドレスと実際のサイズを記録する
(クラステンプレート)
アロケータ対応コンストラクタを選択するために使用されるタグ
(タグ)
指定された型がuses-allocator構築をサポートするかどうかをチェックする
(クラステンプレート)
指定された型が必要とするuses-allocator構築のフレーバーに一致する引数リストを準備する
(関数テンプレート)
uses-allocator構築によって指定された型のオブジェクトを作成する
(関数テンプレート)
uses-allocator構築によって指定されたメモリ位置に指定された型のオブジェクトを作成する
(関数テンプレート)
ヘッダーで定義 <scoped_allocator>
マルチレベルコンテナのためのマルチレベルアロケータを実装する
(クラステンプレート)
ヘッダーで定義 <memory_resource>
名前空間で定義 std::pmr
構築時に基づくランタイムポリモーフィズムをサポートするアロケータ std::pmr::memory_resource
(クラステンプレート)

メモリリソース (C++17以降)

メモリリソースは、 std::pmr::polymorphic_allocator で使用可能なメモリ割り当て戦略を実装します。

ヘッダーで定義 <memory_resource>
名前空間で定義 std::pmr
メモリリソースをカプセル化するクラスの抽象インターフェース
(クラス)
グローバルな std::pmr::memory_resource operator delete を使用してメモリの割り当てと解放を行うプログラム全体の静的 std::pmr::memory_resource を返す
(関数)
割り当てを行わない静的 std::pmr::memory_resource を返す
(関数)
デフォルトの std::pmr::memory_resource を取得する
(関数)
デフォルトの std::pmr::memory_resource を設定する
(関数)
プールリソースのコンストラクタオプションのセット
(クラス)
異なるブロックサイズのプールで割り当てを管理するスレッドセーフな std::pmr::memory_resource
(クラス)
異なるブロックサイズのプールで割り当てを管理するスレッドアンセーフな std::pmr::memory_resource
(クラス)
リソースが破棄されたときにのみ割り当てられたメモリを解放する特殊用途の std::pmr::memory_resource
(クラス)

未初期化メモリアルゴリズム

定義ヘッダ <memory>
未初期化メモリ領域にオブジェクトの範囲をコピーする
(関数テンプレート)
未初期化メモリ領域に指定数のオブジェクトをコピーする
(関数テンプレート)
未初期化メモリ領域(範囲で定義)にオブジェクトをコピーする
(関数テンプレート)
未初期化メモリ領域(開始位置と個数で定義)にオブジェクトをコピーする
(関数テンプレート)
未初期化メモリ領域にオブジェクトの範囲をムーブする
(関数テンプレート)
未初期化メモリ領域に指定数のオブジェクトをムーブする
(関数テンプレート)
未初期化メモリ領域(範囲で定義)で デフォルト初期化 によりオブジェクトを構築する
(関数テンプレート)
未初期化メモリ領域(開始位置と個数で定義)で デフォルト初期化 によりオブジェクトを構築する
(関数テンプレート)
未初期化メモリ領域(範囲で定義)で 値初期化 によりオブジェクトを構築する
(関数テンプレート)
未初期化メモリ領域(開始位置と個数で定義)で 値初期化 によりオブジェクトを構築する
(関数テンプレート)
(C++17)
指定されたアドレスのオブジェクトを破棄する
(関数テンプレート)
(C++17)
オブジェクトの範囲を破棄する
(関数テンプレート)
(C++17)
範囲内の指定数のオブジェクトを破棄する
(関数テンプレート)
指定されたアドレスにオブジェクトを作成する
(関数テンプレート)

制約付き未初期化メモリアルゴリズム (C++20以降)

C++20は 制約付き の未初期化メモリアルゴリズムを提供しており、範囲引数またはイテレータ-センチネルペアを受け入れます。

ヘッダーで定義 <memory>
名前空間で定義 std::ranges
イテレータ、センチネル、および範囲に対する一部の操作が例外を送出しないことを指定する
( 説明専用コンセプト* )
オブジェクトの範囲を未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
指定された数のオブジェクトを未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
オブジェクトを範囲で定義された未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
オブジェクトを開始位置とカウントで定義された未初期化メモリ領域にコピーする
(アルゴリズム関数オブジェクト)
オブジェクトの範囲を未初期化メモリ領域にムーブする
(アルゴリズム関数オブジェクト)
指定された数のオブジェクトを未初期化メモリ領域にムーブする
(アルゴリズム関数オブジェクト)
範囲で定義された未初期化メモリ領域で デフォルト初期化 によってオブジェクトを構築する
(アルゴリズム関数オブジェクト)
開始位置とカウントで定義された未初期化メモリ領域で デフォルト初期化 によってオブジェクトを構築する
(アルゴリズム関数オブジェクト)
範囲で定義された未初期化メモリ領域で 値初期化 によってオブジェクトを構築する
(アルゴリズム関数オブジェクト)
開始位置とカウントで定義された未初期化メモリ領域で 値初期化 によってオブジェクトを構築する
(アルゴリズム関数オブジェクト)
指定されたアドレスのオブジェクトを破棄する
(アルゴリズム関数オブジェクト)
オブジェクトの範囲を破棄する
(アルゴリズム関数オブジェクト)
範囲内の指定された数のオブジェクトを破棄する
(アルゴリズム関数オブジェクト)
指定されたアドレスにオブジェクトを作成する
(アルゴリズム関数オブジェクト)

明示的ライフタイム管理 (since C++23)

定義済みヘッダー <memory>
指定されたストレージ内でオブジェクト表現を再利用してオブジェクトを暗黙的に作成する
(関数テンプレート)

複合クラス設計のための型 (C++26以降)

定義済みヘッダー <memory>
(C++26)
値セマンティクスを持つ動的に割り当てられたオブジェクトを含むラッパー
(クラステンプレート)
値セマンティクスを持つ動的に割り当てられたオブジェクトを含むポリモーフィックなラッパー
(クラステンプレート)

その他

ヘッダーで定義 <memory>
ポインタライクな型に関する情報を提供する
(クラステンプレート)
(C++20)
ポインタライクな型から生ポインタを取得する
(関数テンプレート)
(C++11)
& 演算子がオーバーロードされている場合でも、オブジェクトの実際のアドレスを取得する
(関数テンプレート)
(C++11)
バッファ内でポインタをアラインする
(関数)
ポインタがアラインされていることをコンパイラに通知する
(関数テンプレート)
ポインタが指定された値以上のアライメントを持つオブジェクトを指しているかどうかをチェックする
(関数テンプレート)

低レベルメモリ管理

例として operator new operator delete std::set_new_handler を含みます。

定義済みヘッダー <new>

Cスタイルのメモリ管理

例として std::malloc std::free を含む。

ヘッダーで定義 <cstdlib>

未初期化ストレージ (until C++20)

生ストレージの作成とアクセスのためのいくつかのユーティリティが提供されています。

定義済みヘッダ <memory>
(C++17で非推奨) (C++20で削除)
標準アルゴリズムが未初期化メモリに結果を格納できるようにするイテレータ
(クラステンプレート)
(C++17で非推奨) (C++20で削除)
未初期化ストレージを取得する
(関数テンプレート)
(C++17で非推奨) (C++20で削除)
未初期化ストレージを解放する
(関数テンプレート)

ガベージコレクタサポート (until 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で削除)
ポインタ安全性モデルを列挙する
(列挙型)
(C++11) (C++23で削除)
現在のポインタ安全性モデルを返す
(関数)