理解析构函数和构造函数的生命周期

在这里插入图片描述
通过这个题,让我对构造函数和析构函数的生命周期有了新的理解;
首先我们要明白的是,构造函数是定义的时候调用的,析构函数是对象生命周期结束的时候调用的;
以下是测试代码:
在这里插入图片描述

第一步我们很明确的是先构造a,再构造b,a,b的构造顺序是我们明白的,同时我们也知道栈的特点是后进先出;
c是全局变量,d是静态变量,c,d在整个程序运行期间都存在,main()结束的时候才销毁。同时c是在main函数调用之前,就已经被定义出来了;
第二步:静态变量是在函数第一次调用的时候初始化的;
在这里插入图片描述
假设我们改成这样,a,b会被初始化两次,而d只会在第一个f函数中被初始化。当调用第二个f函数时,d将不会被初始化;

所以构造函数的顺序是:C A B D;
程序调试结果:
在这里插入图片描述
析构顺序:(谁先定义谁后析构)
c肯定是最后析构;
B在A之前析构;
因为D是存在静态区的,而不是存在当前栈帧的,它和全局变量一样,会在main()函数结束的时候销毁;
C是在main函数调用之前定义,而D是在main()函数第一次调用时定义,所以C最后销毁;

所以析构顺序为:BADC;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值