a
から移動-構築する場合b
、それでも破壊する必要b
がありますか、それともそうせずに逃げることができますか?
optional<T>
この質問は、テンプレートの実装中に頭に浮かびました。抜粋:
~optional()
{
if (initialized)
{
reinterpret_cast<T*>(data)->~T();
}
}
optional(optional&& o) : initialized(o.initialized)
{
if (initialized)
{
new(data) T(std::move(*o)); // move from o.data
o.initialized = false; // o.data won't be destructed anymore!
}
}
もちろん、boolinitialized
を、初期化、非初期化、および移動元を区別する3値の列挙に置き換えることもできます。これが厳密に必要かどうかを知りたいだけです。