析构函数

析构函数定义

1.名字与类名相同,在前面加’~‘,没有参数和返回值,一个类最多只能有一个析构函数。

2.析构函数对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作,比如释放分配空间等。

如果定义类时没写析构函数,则编译器生成缺省析构函数。缺省析构函数什么也不做;

如果定义了析构函数,则编译器不再生成。

C++规定析构函数的名字是类名的前面加一个波浪号(~)。其定 义形式为:

析构函数的执行

 当对象的生命周期结束的时候,就会自动执行析构函数。如果出现以下几种情况,程序就会执行析构函数:

(1) 如果在一个函数中定义了一个对象,那么,该对象就是局部对象,当这个函数被调用结束时,对象的生命周期结束。此时,对象应该释放(销毁),在对象释放(销毁)前自动执行析构函数。

(2) static 局部对象在函数调用结束时对象并不释放(销毁),因此,不调用析构函数,只在main() 函数结束或调用exit()函数结束程序的时候,才调用static局部对象的析构函数。

因为static局部对象的生命周期是整个程序运行过程,所以,只有程序结束运行的时候,static局部对象的生命周期才结束,才执行类的析构函数。

(3) 如果定义了一个全局对象,全局对象的生命周期是整个程序运行过程,所以,当程序结束运行的时候,全局对象才销毁,此时,调用该全局对象的析构函数。

(4) 如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。

构造函数和析构函数的调用次序

在使用构造函数和析构函数时,需要特别注意对它们的调用时间和调用次序。
构造函数和析构函数的调用很像一个栈的先进后出,调用析构函数 的次序正好与调用构造函数的次序相反。最先被调用的构造函数, 其对应的(同一对象中的)析构函数最后被调用,而最后被调用的 构造函数,其对应的析构函数最先被调用。

可简述为:先构造的后析构,后构造的先析构。

https://blog.csdn.net/feng19870412/article/details/117790748

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值