<分区>
如果一个对象实际上被 move 到另一个位置,原始对象支持的操作是什么?
为了详细说明,我有一个类型 T
使用可用的 move 构造函数。用下面的语句
T x{constructor-args};
T y{std::move(x)};
对象可以做什么x
(前提是对象实际上使用 x
的可用 move 构造函数从 y
move 到 T
)?
具体而言,
-
x
可以肯定地销毁。我可以假设x
move 后是否容易被破坏? - 可以
x
分配或 move 分配给一个新对象(我想是的,因为我看到很多swap
使用这个)? 我可以构建一个新的 object 对象来代替
x
吗? ?如果有任何机会允许这样做,那么是否有可能有一个uninitialized_move
它适用于(部分)重叠的源和目标范围,例如std::copy
不像std::uninitialized_copy
?T z{some-args}; x = z; //or x = std::move(z); T u{some-args}; new(&x) T{std::move(u)}; // or new(&x) T{u}; etc