![185611a2cd8f71a9618a5aa9885b0656.png](https://i-blog.csdnimg.cn/blog_migrate/1ff99c7f7cafc16138eb1abbf19b6537.jpeg)
特种成员函数
class widget{
public:
widget(); // 默认构造函数
~widget(); // 默认析构函数
widget(const widget&) // 复制构造函数
widget& operator=(const widget&); // 复制赋值运算符
// C++11
widget(widget&&); // 移动构造函数
widget & operator(widget &&); // 复制构造函数
};
C++98有四种特种成员函数:默认构造函数、复制构造函数、析构函数、复制赋值运算符。
C++11加入了两种新的特种成员函数:移动构造函数、移动赋值运算符。
特种成员函数的机制
默认构造函数
仅当类中不包含用户声明的构造函数时才生成
析构函数
- 析构函数默认为noexcept
- 基类的析构函数为虚时,派生类的析构函数为虚
复制构造函数
- 按照成员进行非静态复制成员的复制构造
- 不包含用户声明的复制构构造函数时才生成
- 声明移动操作时复制构造函数将被删除
复制赋值运算符
- 按照成员进行非静态成员的复制赋值
- 不包含用户声明的复制赋值运算符时才生成
- 声明移动操作时复制赋值运算符将被删除
移动构造函数和移动赋值运算符
- 按成员进行非静态成员的移动操作
- 仅当用户声明的操作不存在时才生成