温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++怎么使移动源对象保持有效状态

发布时间:2021-11-29 13:41:56 来源:亿速云 阅读:119 作者:iii 栏目:大数据

这篇文章主要讲解了“C++怎么使移动源对象保持有效状态”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++怎么使移动源对象保持有效状态”吧!


C.64:移动操作在完成移动之后,移动源对象应该保持有效状态
Reason(原因)

这是普遍假定的语义。当y=std::move(x)被执行之后,y的值应该变为x,而x应该处于有效状态。

译者注

x的值被移除和状态无效不是一回事。

Example(示例)
template<typename T>
class X {   // OK: value semantics
public:
   X();
   X(X&& a) noexcept;  // move X
   void modify();     // change the value of X
   // ...
   ~X() { delete[] p; }
private:
   T* p;
   int sz;
};


X::X(X&& a)
   :p{a.p}, sz{a.sz}  // steal representation
{
   a.p = nullptr;     // set to "empty"
   a.sz = 0;
}

void use()
{
   X x{};
   // ...
   X y = std::move(x);
   x = X{};   // OK
} // OK: x can be destroyed
Note(注意)

理想情况下,移动源对象应该变为默认值。除非有非常好的理由,否则一定要这么做。然而,并不是所有的类型都有默认值,有些类型构建有效状态的代码很高昂。标准的要求只是该对象可以被销毁。通常,我们可以以很小的代价很容易地做得更好:标准库的假设是可以为移动源对象赋值。保证移动后的移动源对象处于某种(不可避免地定义了的)有效状态。

Note(注意)

除非有特别强烈的理由不那么做,否则一定要保证在x=std::move(y)执行之后y=z可以按照通常的语义执行。

Enforcement(实施建议)

(不可执行)找到移动操作中的成员被赋值的情况。如果存在默认构造函数,比较移动操作中的赋值操作和默认构造函数中的赋值操作。

感谢各位的阅读,以上就是“C++怎么使移动源对象保持有效状态”的内容了,经过本文的学习后,相信大家对C++怎么使移动源对象保持有效状态这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI