move构造函数是自动生成的

Are move constructors produced automatically?

本文关键字:自动生成 构造函数 move      更新时间:2023-10-16

我有一个大的类,里面有很多STL容器。
编译器会自动创建一个move构造函数,将这些容器移动到目标位置,还是我必须自己创建?

类X的move构造函数被隐式声明为默认值,正好在

  • X没有用户声明的复制构造函数,
  • X没有用户声明的拷贝赋值操作符
  • X没有用户声明的移动赋值操作符,
  • X没有用户声明的析构函数,并且
  • move构造函数不会被隐式定义为删除。

例如,如果你的类有一个没有移动构造函数的类类型数据成员,即使它没有声明任何复制/移动构造函数,你的类也不会得到移动构造函数,因为隐式声明的移动构造函数将被定义为删除(因为那个数据成员)。

默认移动构造函数通常与默认复制构造函数绑定。得到一个就得到另一个。但是,如果编写复制构造函数/赋值操作符,则不会编写默认的复制移动构造函数/赋值操作符。