我有一个看起来像这样的函数,它通过movesemantics返回一个不可复制的类:
MyClass&& MyFunction() {
MyClass myClass;
do some stuff;
return std::move(myClass);
}
然后通过
访问它main() {
MyClass myClass = MyFunction();
}
该课程使用boost::noncopyable
进行复制。它有构造函数,移动构造函数和移动赋值。
我的问题是,析构函数在移动构造函数之前被调用。我做错了什么?
答案 0 :(得分:4)
您正在返回对局部变量的引用。它是左值引用还是右值引用无关紧要。
你可能应该这样做
MyClass MyFunction() {
MyClass myClass;
do some stuff;
return myClass;
}
让编译器弄清楚如何复制或移动结果。