如何使用移动的物体?

8 c++ move-semantics c++11

移动对象后,它必须是可破坏的:

T obj;
func(std::move(obj));
// don't use obj and let it be destroyed as normal
Run Code Online (Sandbox Code Playgroud)

但是obj还能做些什么呢?你能把另一个物体搬进去吗?

T obj;
func(std::move(obj));
obj = std::move(other);
Run Code Online (Sandbox Code Playgroud)

这取决于确切的类型吗?(例如,std :: vector可以为所有T提供你不能依赖的特定保证.)除了对移动对象的破坏之外,所有类型是否需要甚至理智?

Hen*_*rik 6

是的,您可以将另一个对象移入其中.std :: swap就是这样做的.


Ant*_*ams 6

C++ 0x的当前草案要求可以销毁或分配移动的对象.如果将对象传递给标准库中的函数,则可以假设这一切.

通常认为良好的做法是确保移动的对象是满足所有不变量的类型的"工作"对象.然而,这是在未指定状态---如果它是一个容器,你不知道它有多少个元素了,或者它们是什么,但你应该能够调用size()empty(),并对其进行查询.

目前的草案尚不清楚标准库类型本身的要求,并且C++委员会正在积极讨论这个问题.