【发布时间】:2014-03-22 21:24:07
【问题描述】:
如果一个对象实际被移动到另一个位置,那么在原始对象上支持哪些操作?
为了详细说明,我有一个类型 T 和可用的移动构造函数。用以下语句
T x{constructor-args};
T y{std::move(x)};
对象x 可以做什么(假设对象实际上使用T 的可用移动构造函数从x 移动到y)?
具体来说,
-
x肯定可以销毁。我可以假设x在移动后很容易被破坏吗? - 可以将
x分配或移动分配给一个新对象(我猜是的,因为我看到很多swap使用它)? -
我可以构造一个新的对象对象来代替
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
【问题讨论】:
标签: c++ c++11 move-semantics