在移动构造函数之前调用了析构函数?

Vik*_*ehr 4 c++ visual-studio-2010 move-semantics c++11

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

MyClass&& MyFunction() {
  MyClass myClass;
  do some stuff;
  return std::move(myClass);
}
Run Code Online (Sandbox Code Playgroud)

然后由

main() {
  MyClass myClass = MyFunction();
}
Run Code Online (Sandbox Code Playgroud)

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

Bo *_*son 5

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

你可能应该做

MyClass MyFunction() {
  MyClass myClass;
  do some stuff;
  return myClass;
}
Run Code Online (Sandbox Code Playgroud)

并让编译器确定如何复制或移动结果。

  • @BoPersson:在这种情况下,我不是在寻找速度,而是实际类处理硬件资源并且无法复制。我只想跳过返回的指标\智能指标。 (2认同)