析构函数
析构函数定义
1.名字与类名相同,在前面加’~‘,没有参数和返回值,一个类最多只能有一个析构函数。
2.析构函数对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作,比如释放分配空间等。
如果定义类时没写析构函数,则编译器生成缺省析构函数。缺省析构函数什么也不做;
如果定义了析构函数,则编译器不再生成。
C++规定析构函数的名字是类名的前面加一个波浪号(~)。其定 义形式为:
析构函数的执行
当对象的生命周期结束的时候,就会自动执行析构函数。如果出现以下几种情况,程序就会执行析构函数:
(1) 如果在一个函数中定义了一个对象,那么,该对象就是局部对象,当这个函数被调用结束时,对象的生命周期结束。此时,对象应该释放(销毁),在对象释放(销毁)前自动执行析构函数。
(2) static 局部对象在函数调用结束时对象并不释放(销毁),因此,不调用析构函数,只在main() 函数结束或调用exit()函数结束程序的时候,才调用static局部对象的析构函数。
因为static局部对象的生命周期是整个程序运行过程,所以,只有程序结束运行的时候,static局部对象的生命周期才结束,才执行类的析构函数。
(3) 如果定义了一个全局对象,全局对象的生命周期是整个程序运行过程,所以,当程序结束运行的时候,全局对象才销毁,此时,调用该全局对象的析构函数。
(4) 如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。
构造函数和析构函数的调用次序
在使用构造函数和析构函数时,需要特别注意对它们的调用时间和调用次序。
构造函数和析构函数的调用很像一个栈的先进后出,调用析构函数 的次序正好与调用构造函数的次序相反。最先被调用的构造函数, 其对应的(同一对象中的)析构函数最后被调用,而最后被调用的 构造函数,其对应的析构函数最先被调用。
可简述为:先构造的后析构,后构造的先析构。
https://blog.csdn.net/feng19870412/article/details/117790748