我有一个包含许多STL容器的大类。
编译器会自动创建一个移动构造函数,将这些容器移动到目标位置吗?还是我需要自己创建一个?
我有一个包含许多STL容器的大类。
编译器会自动创建一个移动构造函数,将这些容器移动到目标位置吗?还是我需要自己创建一个?
当满足以下条件时,类X的移动构造函数会被隐式声明为默认值:
- X没有用户声明的复制构造函数,
- X没有用户声明的复制赋值运算符,
- X没有用户声明的移动赋值运算符,
- X没有用户声明的析构函数,并且
- 移动构造函数不会被隐式定义为已删除。
例如,如果你的类有一个没有移动构造函数的类类型数据成员,即使它没有声明任何复制/移动构造函数,它也不会获得移动构造函数,因为隐式声明的移动构造函数会因为那个数据成员而被定义为已删除。
默认移动构造函数通常与默认复制构造函数绑定在一起。当您获得一个时,您会获得另一个。然而,如果您编写了复制构造函数/赋值运算符,则不会编写默认的复制和移动构造函数/赋值运算符。如果您编写其中一个集合,您必须编写它们全部。