概念
析构函数是一种特殊的成员函数,它执行与构造函数相反的操作,通常用于撤销对象时的一些清理任务,最常见的使用情景有函数调用结束后形参的收回、delete删除等。
特点
- 析构函数与构造函数名字相同,但它前面必须加一个波浪号。
- 析构函数不能有参数,不能重载,一个类中只能有一个析构函数。(考试常考:一个类可以有多个构造函数但只有一个析构函数。)
- 析构函数每个类必须会有,如果没有定义析构函数,系统会调用一个默认的析构函数,默认析构函数只能释放对象的数据成员所占用的空间,但不包括堆内存空间。(每个类一定要有构造函数和析构函数和拷贝构造函数)
调用构造函数和析构函数的顺序
1.一般顺序:在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反:最先被调用的构造函数,其对应的析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。(先造出来的最后被消掉,最后被造出来了先消掉)
- 全局对象:在全局范围内定义的对象(即在所有函数之外定义的对象),它的构造函数在所有函数(包括main)函数之前调用。在程序的流程离开其作用域时(如main函数结束或使用exit函数时),调用该全局对象的析构函数。(main结束或者遇到
exit()
函数) - auto局部对象:局部自动对象,则在建立对象时调用其构造函数。如果