可能重复:
我可以对移出的对象做什么?
在您调用std::move
并将结果传递给函数之后,您通常必须假设稍后访问移动的对象将导致未定义的行为。
是否有工具可以检测这些访问并警告您。例如:
{
Widget w;
foo(std::move(w));
// w may be undefined at this point
w.doSomething(); // WARN
}
至少,并gcc 4.7.2
没有抱怨。clang 3.2
-Wall
更新:回顾这个问题,关键点是编译器无法确定一个对象在被移动后是否仍然有效。如果提案N4034: Destructive Move被接受,我希望编译器有更多的选择(但前提是移动是破坏性的)。