如果我 move-construct a
from b
,是否仍然需要destruct 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!
}
}
当然,我可以将 bool 替换为initialized
一个区分已初始化、未初始化和移出的三值枚举。我只想知道这是否是绝对必要的。