6个特种函数,以class A为例:
- 默认构造函数:A();
- 析构函数:~A();
- 复制构造函数:A(const A& a);
- 复制赋值运算符:A& operator=(const A& a);
- 移动构造函数:A(A&& a);
- 移动赋值运算符:A& operator=(A&& a);
生成默认移动操作的条件:
- 如果一个类定义了自己的拷贝构造函数、拷贝赋值运算符或者析构函数,编译器就不会生成默认的移动构造函数和移动赋值运算符。
- 只有当一个类没有定义任何自己版本的拷贝控制成员,且类的每个非static数据成员都可以移动时,编译器才会为它合成移动构造函数和移动赋值运算符。