動的メモリ管理
提供: cppreference.com
< cpp
目次 |
[編集] スマートポインタ
スマートポインタを使うと、オブジェクトの生存期間を、自動的に、例外安全に、管理できます。
ヘッダ
<memory> で定義 | |
ポインタ | |
(C++11) |
唯一のオブジェクト所有権のセマンティクスを持つスマートポインタ (クラステンプレート) |
(C++11) |
共有オブジェクト所有権のセマンティクスを持つスマートポインタ (クラステンプレート) |
(C++11) |
std::shared_ptr によって管理されているオブジェクトへの弱参照 (クラステンプレート) |
(C++17で削除) |
厳格なオブジェクト所有権のセマンティクスを持つスマートポインタ (クラステンプレート) |
ヘルパークラス | |
(C++11) |
shared_ptr と weak_ptr の混ざった型に対するオーナーベースの順序付けを提供します (クラステンプレート) |
(C++11) |
自身を参照する shared_ptr の作成を可能にします (クラステンプレート) |
(C++11) |
すでに破棄されたオブジェクトを参照する weak_ptr にアクセスしたとき投げられる例外 (クラス) |
(C++11) |
unique_ptr のためのデフォルトのデリータ (クラステンプレート) |
[編集] アロケータ
アロケータはメモリ確保戦略をカプセル化するクラステンプレートです。 これにより汎用コンテナはデータ自身からメモリ管理を切り離せます。
ヘッダ
<memory> で定義 | |
デフォルトのアロケータ (クラステンプレート) | |
(C++11) |
アロケータ型に関する情報を提供します (クラステンプレート) |
(C++11) |
アロケータ対応のコンストラクタのオーバーロードを選択するために使用されるタグ型 (クラス) |
(C++11) |
アロケータ対応のコンストラクタを選択するために使用される std::allocator_arg_t 型のオブジェクト (定数) |
(C++11) |
指定された型がアロケータ使用構築をサポートしているかどうか調べます (クラステンプレート) |
指定された型によって要求されるアロケータ使用構築のフレーバにマッチする引数リストを準備します (関数テンプレート) | |
(C++20) |
アロケータ使用構築の手法によって指定された型のオブジェクトを作成します (関数テンプレート) |
アロケータ使用構築の手法によって指定されたメモリ位置に指定された型のオブジェクトを作成します (関数テンプレート) | |
ヘッダ
<scoped_allocator> で定義 | |
(C++11) |
多段コンテナのための多段アロケータを実装します (クラステンプレート) |
ヘッダ
<memory_resource> で定義 | |
名前空間
pmr で定義 | |
(C++17) |
構築時に指定された std::memory_resource をベースとした実行時ポリモーフィズムをサポートするアロケータ (クラステンプレート) |
[編集] メモリリソース
メモリリソースは std::pmr::polymorphic_allocator によって使用されるメモリ確保戦略を実装します。
ヘッダ
<memory_resource> で定義 | |
名前空間
pmr で定義 | |
(C++17) |
メモリリソースをカプセル化するクラスへの抽象インタフェース (クラス) |
(C++17) |
グローバルな operator new と operator delete を使用してメモリの確保および解放を行う static でプログラムワイドな std::pmr::memory_resource を返します (関数) |
(C++17) |
確保を行わない static な 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 (クラス) |
[編集] 未初期化記憶域
生の記憶域を作成したりアクセスしたりするためのユーティリティがいくつか提供されます。
ヘッダ
<memory> で定義 | |
指定範囲のオブジェクトをメモリの未初期化領域にコピーします (関数テンプレート) | |
(C++11) |
指定個数のオブジェクトをメモリの未初期化領域にコピーします (関数テンプレート) |
1個のオブジェクトをメモリの未初期化領域の指定範囲にコピーします (関数テンプレート) | |
1個のオブジェクトをメモリの未初期化領域に指定個数コピーします (関数テンプレート) | |
(C++17) |
指定範囲のオブジェクトをメモリの未初期化領域にムーブします (関数テンプレート) |
(C++17) |
指定個数のオブジェクトをメモリの未初期化領域にムーブします (関数テンプレート) |
オブジェクトをデフォルト初期化によりメモリの未初期化領域の指定範囲に構築します (関数テンプレート) | |
オブジェクトをデフォルト初期化によりメモリの未初期化領域に指定個数構築します (関数テンプレート) | |
オブジェクトを値初期化によりメモリの未初期化領域の指定範囲に構築します (関数テンプレート) | |
オブジェクトを値初期化によりメモリの未初期化領域に指定個数構築します (関数テンプレート) | |
(C++17) |
指定されたアドレスにあるオブジェクトを破棄します (関数テンプレート) |
(C++17) |
指定範囲のオブジェクトを破棄します (関数テンプレート) |
(C++17) |
指定個数のオブジェクトを破棄します (関数テンプレート) |
(C++20) |
指定されたアドレスにオブジェクトを作成します (関数テンプレート) |
(C++17で非推奨)(C++20で削除) |
標準アルゴリズムで未初期化メモリに結果を格納できるようにするイテレータ (クラステンプレート) |
(C++17で非推奨)(C++20で削除) |
未初期化記憶域を取得します (関数テンプレート) |
(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) |
指定されたアドレスにオブジェクトを作成します (ニーブロイド) |
[編集] ガベージコレクションサポート
ヘッダ
<memory> で定義 | |
(C++11) |
オブジェクトが回収できないことを宣言します (関数) |
(C++11) |
オブジェクトが回収できることを宣言します (関数テンプレート) |
(C++11) |
メモリ領域に追跡可能なポインタが含まれていないことを宣言します (関数) |
(C++11) |
std::declare_no_pointers の効果を取り消します (関数) |
(C++11) |
ポインタ安全性モデルを表します (列挙) |
(C++11) |
現在のポインタ安全性モデルを返します (関数) |
[編集] その他
ヘッダ
<memory> で定義 | |
(C++11) |
ポインタライクな型に関する情報を提供します (クラステンプレート) |
(C++20) |
ポインタライクな型から生のポインタを取得します (関数テンプレート) |
(C++11) |
& 演算子がオーバーロードされている場合でも、オブジェクトの実際のアドレスを取得します (関数テンプレート) |
(C++11) |
バッファ内のポインタをアライメント調整します (関数) |
(C++20) |
ポインタがアラインされていることをコンパイラに伝えます (関数テンプレート) |
[編集] C スタイルのメモリ管理
std::malloc, std::free など。