析构函数
1、特殊的成员函数
函数名必须是
~类名(void)
{
}
//没有参数、没有返回值、不能重载
2、谁来调用
析构函数会在销毁对象时自动调用,在对象整个生命周期来最多被调用一次
而构造函数一定被调用一次
3、析构函数负责什么
析构函数负责释放在构造函数期间所获取的所有资源,它的执行过程:
- 先执行析构函数本身代码
- 调用成员类的析构函数
- 调用父类的析构函数
- 缺省的析构函数
- 如果一个类没有实现析构函数,编译器会自动生成一个具有析构函数功能的二进制指令,它负责释放编译器能够看的到的资源(成员变量、类成员、父类成员),这就是缺省析构
如果一个类没有动态资源,也不需要善后工作,缺省析构就完全够用了。不需要再定义新的析构函数了
注意:缺省析构无法释放动态资源(堆内存)
类对象的创建过程与释放过程
创建:1、分配内存(对象)
2、父类构造
3、成员构造
4、自己的构造
父类构造:按照继承表从左到右依次构造
成员构造:按照声明顺序从上到下依次构造
释放:1、自己析构 (对称)
2、析构成员
3、析构父类
4、释放内存
析构成员:按照声明顺序从下到上依次构造
析构父类:按照继承表从右到左依次构造