大家好,我是苏貝,本篇博客带大家了解C++的析构函数,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
目录
- 1. 概念
- 2. 特性
1. 概念
通过前面构造函数的学习,我们知道一个对象是怎么来的,那一个对象又是怎么没呢的?
析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作(如我们之前在数据结构实现的顺序表、堆、栈等时写的destroy函数)
2. 特性
析构函数是特殊的成员函数,其特征如下:
- 析构函数名是在类名前加上字符 ~
- 无参数无返回值类型。
- 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载 (因为形参只能是无)
- 对象生命周期结束时,C++编译系统自动调用析构函数。
- 编译器自动生成的析构函数,对内置类型的成员变量不做处理,对自定义类型的成员变量调用它的析构函数。
-
如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如 Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。
-
先定义的对象先调用构造函数,后定义的对象先调用析构函数
都是局部对象,后定义的先调用析构函数
对象生命周期结束时,编译器自动调用析构函数。局部变量(栈)在main函数结束后,生命周期结束。Main函数里的Static修饰的静态变量在静态区,等main函数将栈上的空间释放后,生命周期结束。
两个静态变量,后定义的先调用析构函数
全局变量也在静态区,后定义的先调用
析构函数的调用顺序总结:
局部对象 -> 局部的静态对象 -> 全局对象/静态对象
好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️