加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 被移动 – 需要被破坏的对象?

发布时间:2020-12-16 07:49:58 所属栏目:百科 来源:网络整理
导读:如果我从b移动构建一个,还是有必要破坏b,还是不能这样做呢? 这个问题在实施可选的 T模板.摘抄: ~optional(){ if (initialized) { reinterpret_castT*(data)-~T(); }}optional(optional o) : initialized(o.initialized){ if (initialized) { new(data) T(s
如果我从b移动构建一个,还是有必要破坏b,还是不能这样做呢?

这个问题在实施可选的< 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,区分初始化的,非初始化的和被移动的.我只是想知道这是否是严格必要的.

解决方法

是的,还有必要破坏b.从对象移动的是一个有效的构造对象.在某些情况下,甚至可能会持有仍然需要处理的资源.在通用代码中,如你所示,T可能甚至没有移动构造函数.在这种情况下,您可以调用复制构造函数.所以你绝对不能假设?T()是一个无操作,可以被删除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读