Возможный дубликат:
Что мне делать с перемещенным объектом?
После того, как вы вызвали std::move
и передали результат функции, вам обычно нужно предположить, что доступ к перемещенному объекту позже приведет к поведению undefined.
Существуют ли инструменты, которые могут обнаруживать эти обращения и предупреждать вас. Например:
{
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, я бы ожидал, что у компилятора будет больше параметров (но только если это движение разрушительно).