У меня есть функция, которая выглядит примерно так, он возвращает noncopyable класс по movesemantics:Деструктор, вызываемый перед move-constructor?
MyClass&& MyFunction() {
MyClass myClass;
do some stuff;
return std::move(myClass);
}
А потом это доступ
main() {
MyClass myClass = MyFunction();
}
Класс использует boost::noncopyable
для copyprevention. Он имеет конструктор, конструктор перемещения и назначение перемещения. Моя проблема заключается в том, что деструктор вызывается перед конструктором перемещения. Что я сделал не так?
Я думал, что вы явно возвратили rvalues. –
Да, это ожидалось на ранней стадии. Позже выяснилось, что это не совсем так. См. [Хотите скорость? Перейдите по значению] (http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/). –
В этом случае компилятор всегда будет перемещать 'myClass'. – Puppy