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

时间:2011-11-27 04:09:44

标签: c++ c++11 move-constructor

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

2 个答案:

答案 0 :(得分:49)

类X的移动构造函数在

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

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

答案 1 :(得分:1)

默认移动构造函数通常与默认复制构造函数绑定。当你得到另一个时,你得到一个。但是,如果编写复制构造函数/赋值运算符,则不会写入默认的副本移动构造函数/赋值运算符。如果您编写任何一个集合,则必须全部写入。