在构造函数之前调用析构函数?

时间:2012-07-03 16:54:30

标签: c++ visual-studio-2010 c++11 move-semantics

我有一个看起来像这样的函数,它通过movesemantics返回一个不可复制的类:

MyClass&& MyFunction() {
  MyClass myClass;
  do some stuff;
  return std::move(myClass);
}

然后通过

访问它
main() {
  MyClass myClass = MyFunction();
}

该课程使用boost::noncopyable进行复制。它有构造函数,移动构造函数和移动赋值。 我的问题是,析构函数在移动构造函数之前被调用。我做错了什么?

1 个答案:

答案 0 :(得分:4)

您正在返回对局部变量的引用。它是左值引用还是右值引用无关紧要。

你可能应该这样做

MyClass MyFunction() {
  MyClass myClass;
  do some stuff;
  return myClass;
}

让编译器弄清楚如何复制或移动结果。