添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

T 不完全型 である場合、 operator() の実行は 不適格 となる。

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

対応バージョン template<class U> default_delete()(default_delete<U> const& other) noexcept; 変換可能な型からのコピーコンストラクタ。 C++11
C++23からconstexpr指定 ~default_delete() = default; デストラクタ C++11 void operator()(T* ptr) const; 関数呼び出し演算子。渡されたポインタ ptr delete ptr; で削除する C++11
C++23からconstexpr指定

配列版のメンバ関数

対応バージョン template <class U> default_delete()(const default_delete<U[]>&) noexcept; 変換可能な型からのコピーコンストラクタ。 C++17
C++23からconstexpr指定 ~default_delete() = default; デストラクタ C++11 void operator()(T* ptr) const;
template <class U>
void operator()(U*) const = delete; 関数呼び出し演算子。渡されたポインタ ptr delete[] ptr; で削除する C++11
C++14まで template <class U> void operator()(U* ptr) const; 関数呼び出し演算子。渡されたポインタ ptr delete[] ptr; で削除する。変換可能な型の配列へのポインタも削除可能。 C++17
C++23からconstexpr指定

#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[]される

バージョン

  • C++11
  • Clang: ??
  • GCC: 4.4 , 4.7.2
  • ICC: ??
  • Visual C++: 2010 , 2012 , 2013
  • P2273R3 Making std::unique_ptr constexpr
  •