4

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

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

然后它被访问

main() {
  MyClass myClass = MyFunction();
}

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

4

1 回答 1

5

您正在返回对局部变量的引用。它是左值引用还是右值引用都没有关系。

你可能应该这样做

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

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

于 2012-07-03T17:04:49.323 回答