~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のデストラクタは呼ばれない
}
38
std::optional<A> a = std::make_optional<A>();
#include <optional>
struct A {
// ユーザー定義のデストラクタを持つ
~A()
{
}
};
struct B {
// ユーザー定義のデストラクタを持たない
};
struct C {
A a;
// ユーザー定義のデストラクタを持つ。
// (ユーザー定義のデストラクタを持つ型のメンバ変数を持っている)
出力
バージョン
言語
- C++17
処理系
- Clang: 4.0.1 ✅
- GCC: 7.2 ✅
- ICC: ??
- Visual C++: ??