六一的部落格


关关难过关关过,前路漫漫亦灿灿。



destructor

销毁类对象时,对其调用析构函数

函数名为波浪号 ~ 后接类名,没有返回类型,不接受参数

不能被重载: 一个类只有一个析构函数


析构函数的组成

  1. 函数体
  2. 析构部分: 析构部分是隐式的

析构函数中, 先执行函数体; 再在隐含的析构阶段执行析构部分: 销毁非static成员, 成员按初始化顺序的逆序销毁

如果未定义析构函数,编译器提供合成版本


比较析构函数和构造函数

  1. 均没有返回类型
  2. 析构函数执行与构造函数相反的操作
构造函数 析构函数
支持重载 不接受参数; 不支持重载
初始值列表 + 函数体 函数体 + 析构部分
执行函数体之前按类中定义的顺序初始化非static数据成员 在析构部分按初始化顺序的逆序销毁非static数据成员

析构函数的合成版本

synthesized destructor

如果没有给出析构函数的定义, 编译器会提供析构函数的合成版本

如果析构函数的合成版本不为删除 delete , 其函数体为空


析构函数


destructor

销毁类对象时,对其调用析构函数

函数名为波浪号 ~ 后接类名,没有返回类型,不接受参数

不能被重载: 一个类只有一个析构函数


析构函数的组成

  1. 函数体
  2. 析构部分: 析构部分是隐式的

析构函数中, 先执行函数体; 再在隐含的析构阶段执行析构部分: 销毁非static成员, 成员按初始化顺序的逆序销毁

如果未定义析构函数,编译器提供合成版本


比较析构函数和构造函数

  1. 均没有返回类型
  2. 析构函数执行与构造函数相反的操作
构造函数 析构函数
支持重载 不接受参数; 不支持重载
初始值列表 + 函数体 函数体 + 析构部分
执行函数体之前按类中定义的顺序初始化非static数据成员 在析构部分按初始化顺序的逆序销毁非static数据成员

析构函数的合成版本

synthesized destructor

如果没有给出析构函数的定义, 编译器会提供析构函数的合成版本

如果析构函数的合成版本不为删除 delete , 其函数体为空