【发布时间】:2011-10-20 02:30:13
【问题描述】:
如果我从b 移动-构造a,是否仍然有必要破坏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 替换为区分已初始化、未初始化和移出的三值枚举。我只是想知道这是否是绝对必要的。
【问题讨论】:
-
为什么要使用析构函数?为什么不删除?移动后,您可以将其设置为 0。
-
@balki:不确定你得到了什么。我的
optional<T>模板中没有动态内存,所以delete没有任何内容。 -
我正在实施完全相同的事情,并且有完全相同的问题!谢谢!
标签: c++ c++11 destructor rvalue-reference move-semantics