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

移动物体怎么办?

移动物体怎么办?

C++
波斯汪 2019-07-23 14:34:58
移动物体怎么办?标准是否准确定义了对象移动后我可以对其做什么?我曾经认为你用移动物体做的所有事情都会破坏它,但这还不够。例如,采用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贡献1779条经验 获得超6个赞

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

旁注:我相信T c = std::move(a)如果移动构造函数(或复制构造函数,如果没有提供移动)是显式的,则函数将失败。


查看完整回答
反对 回复 2019-07-23
  • 2 回答
  • 0 关注
  • 342 浏览

添加回答

举报

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