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

履歴 編集

function
<optional>

std::optional::デストラクタ(C++17)

~optional();           // C++17
constexpr ~optional(); // C++23

概要

optionalオブジェクトを破棄する

効果

有効値を保持している場合、型Tが非トリビアルなデストラクタを持っているならデストラクタを呼び出す。有効値を保持していない場合は、なにもしない。

#include <optional>

struct A {
  // ユーザー定義のデストラクタを持つ
  ~A()
  {
  }
};

struct B {
  // ユーザー定義のデストラクタを持たない
};

struct C {
  A a;

  // ユーザー定義のデストラクタを持つ。
  // (ユーザー定義のデストラクタを持つ型のメンバ変数を持っている)
};

int main()
{
  {
    std::optional<A> a = std::make_optional<A>();
    std::optional<B> b = std::make_optional<B>();
    std::optional<C> c = std::make_optional<C>();

    std::optional<int> opt_int = 1;
  } // Aのデストラクタが呼ばれる
    // Bのデストラクタは呼ばれない
    // Cのデストラクタは呼ばれる
    // opt_intのデストラクタは呼ばれない

  {
    std::optional<A> a_null;
  } // Aのデストラクタは呼ばれない
}

出力

バージョン

言語

  • C++17

処理系

関連項目