析构函数
2023年12月29日 2023年12月30日
destructor
销毁类对象时,对其调用析构函数
函数名为波浪号 ~
后接类名,没有返回类型,不接受参数
不能被重载: 一个类只有一个析构函数
析构函数的组成
- 函数体
- 析构部分: 析构部分是隐式的
析构函数中, 先执行函数体; 再在隐含的析构阶段执行析构部分: 销毁非static成员, 成员按初始化顺序的逆序销毁
如果未定义析构函数,编译器提供合成版本
比较析构函数和构造函数
- 均没有返回类型
- 析构函数执行与构造函数相反的操作
构造函数 | 析构函数 |
---|---|
支持重载 | 不接受参数; 不支持重载 |
初始值列表 + 函数体 | 函数体 + 析构部分 |
执行函数体之前按类中定义的顺序初始化非static数据成员 | 在析构部分按初始化顺序的逆序销毁非static数据成员 |
析构函数的合成版本
synthesized destructor
如果没有给出析构函数的定义, 编译器会提供析构函数的合成版本
如果析构函数的合成版本不为删除 delete
, 其函数体为空