【发布时间】:2021-01-02 18:23:54
【问题描述】:
给出以下定义:
- object -- 一个连续的内存区域,保存某种类型的值。
- value -- 根据对象类型解释的对象位。
C++ 编程语言书 [第 4 版] 的第 6.4.1 节在讨论值类别时指出:
Movable: 物体可以被移动(也就是说,我们可以移动 将其值转移到另一个位置并将对象保留在有效但 未指定的状态,而不是复制。
问题:
- “将其价值转移到另一个位置”的真正含义是什么?
- 如何移动值(位解释)?
- 如何在没有副本的情况下“移动”对象的字节?只是没有意义。
谁能解释一下?
【问题讨论】:
-
请记住,这个“连续区域”可能包含指向存储在相关对象“外部”的其他数据的指针。 (参见字符串和向量)
-
值不会被移动到另一个位置,但值和对象的所有权将被移动到新的所有者。
-
“移动”是“拥有”任何包含的资源/生命周期的“副本”。例如,这可能是复制指针值而不是复制底层对象。这就是为什么捐赠者/来源处于“有效但未指定的状态”。
-
@ThomasMatthews 取决于被视为实例的内容。移出的对象仍然是对象。只是在设置为有效状态之前不应使用。
-
有用的查看:youtube.com/watch?v=vLinb2fgkHk。您可能会认出演示者的名字。他回答了这个问题。
标签: c++ language-lawyer move-semantics