为了账号安全,请及时绑定邮箱和手机立即绑定

我能用移出的物体做什么?

我能用移出的物体做什么?

C++
德玛西亚99 2019-06-29 10:07:32
我能用移出的物体做什么?标准是否精确地定义了在对象被移出后我可以对它做什么?我曾经认为,对一个移动对象所能做的就是销毁它,但这是不够的。例如,以函数模板为例swap如标准库中所定义的:template <typename T>void swap(T& a, T& b){     T c = std::move(a); // line 1     a = std::move(b);   // line 2: assignment to moved-from object!     b = std::move(c);   // line 3: assignment to moved-from object!}显然,必须可以将移出对象分配给移动对象,否则第2行和第3行将失败。那么,我还能用移动对象做什么呢?我在哪里可以在标准中找到这些细节?(顺便问一下,为什么T c = std::move(a);而不是T c(std::move(a));在第1行?)
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

移出对象存在于未指定但有效的状态中。这表明,虽然对象可能不能再做很多事情,但它的所有成员函数仍然应该表现出定义的行为-包括operator=-它的所有成员都处于一个明确的状态-而且它仍然需要毁灭。标准没有给出特定的定义,因为它对每个UDT都是唯一的,但是您可能能够找到标准类型的规范。有些像容器是比较明显的-它们只是移动它们的内容,空容器是一个定义良好的有效状态。原语不修改Move-From对象。

附带说明:我相信T c = std::move(a)因此,如果移动构造函数(如果没有提供移动时复制构造函数)是显式的,则函数将失败。


查看完整回答
反对 回复 2019-06-29
  • 2 回答
  • 0 关注
  • 373 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信