最終更新日時(UTC):
が更新

履歴 編集

class template
<memory>

std::default_delete

namespace std {
  // 単一オブジェクト版
  template <class T>
  struct default_delete;

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

概要

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

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

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

名前 説明 対応バージョン
constexpr default_delete() noexcept = default; コンストラクタ。 C++11
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; 関数呼び出し演算子。渡されたポインタptrdelete ptr;で削除する C++11
C++23からconstexpr指定

配列版のメンバ関数

名前 説明 対応バージョン
constexpr default_delete() noexcept=default; デフォルトコンストラクタ。 C++11
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;
関数呼び出し演算子。渡されたポインタptrdelete[] ptr;で削除する C++11
C++14まで
template <class U> void operator()(U* ptr) const; 関数呼び出し演算子。渡されたポインタptrdelete[] 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

処理系

参照