移动构造函数是自动生成的吗?

Dan*_*ani 32 c++ move-constructor c++11

我有一个大班,拿着很多STL容器.
编译器会自动创建一个移动构造函数来将这些容器移动到目标,还是我必须自己创建?

Joh*_*itb 52

类X的移动构造函数被隐式声明为默认为何时

  • X没有用户声明的复制构造函数,
  • X没有用户声明的复制赋值运算符,
  • X没有用户声明的移动赋值运算符,
  • X没有用户声明的析构函数,和
  • 移动构造函数不会被隐式定义为已删除.

因此,例如,如果您的类具有没有移动构造函数的类类型数据成员,则即使它没有声明任何复制/移动构造函数,您的类也不会获得移动构造函数,因为隐式声明的移动构造函数将被定义为已删除(因为该数据成员).

  • 有趣的是,用户声明的移动构造函数不会阻止编译器隐式声明复制构造函数.也许,这里值得一提.至少这是http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html所说的. (6认同)
  • 有趣的是****所有**成员都需要有一个移动构造函数.移动所有可以移动的成员并复制那些不可移动的成员似乎是理智的. (6认同)