移动对象后,它必须是可破坏的:
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提供你不能依赖的特定保证.)除了对移动对象的破坏之外,所有类型是否需要甚至理智?
C++ 0x的当前草案要求可以销毁或分配移动的对象.如果将对象传递给标准库中的函数,则可以假设这一切.
通常认为良好的做法是确保移动的对象是满足所有不变量的类型的"工作"对象.然而,这是在未指定状态---如果它是一个容器,你不知道它有多少个元素了,或者它们是什么,但你应该能够调用size()和empty(),并对其进行查询.
目前的草案尚不清楚标准库类型本身的要求,并且C++委员会正在积极讨论这个问题.