Skip to content

Latest commit

 

History

History
92 lines (68 loc) · 3.25 KB

File metadata and controls

92 lines (68 loc) · 3.25 KB

default_delete

  • memory[meta header]
  • std[meta namespace]
  • class template[meta id-type]
  • cpp11[meta cpp]
namespace std {
  // 単一オブジェクト版
  template <class T>
  struct default_delete;

  // 配列版
  template <class T>
  struct default_delete<T[]>;
}

概要

default_deleteは、リソースを自動的に解放するスマートポインタクラスであるunique_ptrにおいて、デフォルトで使用されるデリータクラスである。unique_ptrが配列を所有できるようにするため、T[]時にはdelete[]を呼びだすように特殊化される。

テンプレートパラメータTには不完全型を指定してよい。ただし、型Tが不完全型である場合、operator()の実行は不適格となる。

単一オブジェクト版のメンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
operator() 渡されたポインタをdeleteで削除する C++11

配列版のメンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
operator() 渡されたポインタをdelete[]で削除する C++11

デストラクタは宣言されておらず、暗黙に定義される。

#include <memory>

// default_deleteはunique_ptrのデフォルト引数として自動的に渡されるため、
// ここでは説明用に明示的にdefault_deleteを指定する

int main()
{
  {
    std::unique_ptr<int, std::default_delete<int>> p(new int());
    *p = 3;
  } // pが指しているintオブジェクトがdeleteされる

  {
    std::unique_ptr<int[], std::default_delete<int[]>> p(new int[3]);

    for (std::size_t i = 0; i < 3; ++i) {
      p[i] = i;
    }
  } // pが指しているint配列がdelete[]される
}
  • std::default_delete[color ff0000]

出力

バージョン

言語

  • C++11

処理系

  • Clang: ??
  • GCC: 4.4 [mark verified], 4.7.2 [mark verified]
  • ICC: ??
  • Visual C++: 2010 [mark verified], 2012 [mark verified], 2013 [mark verified]

関連項目

参照