C++メモリ管理


構文

  • ::( OPT)新( 表現リスト )(OPT) 新型-ID、 新たな初期化子 (OPT)
  • :( opt )new( 式リスト )( opt )( タイプIDnew-initializeropt
  • ::( optキャスト式を削除する
  • ::( opt )delete [] キャスト式
  • std :: unique_ptr < type-id > var_name(新しいタイプ -id( opt )); // C ++ 11
  • std :: shared_ptr < タイプID > var_name(新しいタイプ -id( opt )); // C ++ 11
  • std :: shared_ptr < タイプID > var_name = std :: make_shared < タイプID >( opt ); // C ++ 11
  • std :: unique_ptr < type-id > var_name = std :: make_unique < タイプID >( opt ); // C ++ 14

備考

leading ::は、オーバーロードされたクラス固有の新規または削除演算子をオーバーライドして、new演算子またはdelete演算子をグローバルスコープで検索させます。

newキーワードの後のオプションの引数は、通常、 配置newを呼び出すために使用されますが、選択されたプールからメモリを割り当てることを要求するタグなど、追加情報をアロケータに渡すためにも使用できます。

割り当てられた型は、通常 new Fooに明示的に指定されますが、 auto (C ++ 11以降)またはdecltype(auto) (C ++ 14以降)として初期化子から推論することもできます。

割り当てられたオブジェクトの初期化は、ローカル変数の初期化と同じ規則に従って行われます。特に、イニシャライザが省略された場合、オブジェクトはデフォルトで初期化され、スカラー型またはスカラー型の配列を動的に割り当てる場合、メモリがゼロになるという保証はありません。

new-expressionで作成された配列オブジェクトは、 new-expression[]書かれているかどうかにかかわらず、 delete[]を使ってdelete[]必要があります。例えば:

using IA = int[4];
int* pIA = new IA;
delete[] pIA;  // right
// delete pIA;  // wrong

メモリ管理 関連する例