c++ - 在 move 构造函数之前调用析构函数?

标签 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 来防止复制。它有构造函数、 move 构造函数和 move 赋值。 我的问题是,析构函数在 move 构造函数之前被调用。我做错了什么?

最佳答案

您正在返回对局部变量的引用。它是左值引用还是右值引用并不重要。

你可能应该这样做

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

并让编译器找出如何复制或 move 结果。

关于c++ - 在 move 构造函数之前调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11315593/

相关文章:

multithreading - 使用C++ 0x线程库退出时崩溃

c++ - 可以删除继承的成员或阻止继承某些属性/方法吗?

c++ - 通用树的析构函数

c++ - 将终端对 bash 命令的响应读入 C++ 变量

c++ - 让线程等待内存中值更改的有效方法?

c++ - array<System::String ^> 标准 C++ 是怎样的?

c# - 如果 ImageButton 是在代码后面创建的,如何使用 ImageButton.OnClick

c++ - Visual Studio 调试与发布版本 : comparing int and float missmatch

c++ - 使用 Wt 和 libHARU 未定义引用渲染 PDF

c++ - 在 Visual Studio 2010/2012 和 Release 模式下使用 SSE 内部函数时结果不正确