如果我使用move构造函数从
在实现一个
当然,我可以用一个三值枚举来替换布尔类型的
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!
}
}
当然,我可以用一个三值枚举来替换布尔类型的
initialized
,以区分已初始化、未初始化和移动状态。但我只是想知道这是否绝对必要。
optional<T>
模板中没有动态内存,所以没有需要delete
的东西。 - fredoverflow