可能重复:
我可以对移出的对象做什么?
例如,请参阅此代码:
template<class T>
void swap(T& a, T& b)
{
T tmp(std::move(a));
a = std::move(b);
b = std::move(tmp);
}
只是我,还是这里有错误?如果你move
a
进入tmp
,那么不就a
失效了吗?
即移动分配不应该a
是b
一个带有放置的移动构造函数调用new
吗?
如果不是,那么移动构造函数和移动赋值运算符有什么区别?
template<class T>
void swap(T& a, T& b)
{
T tmp(std::move(a));
new(&a) T(std::move(b));
new(&b) T(std::move(tmp));
}