C++ 的析构与atexit()

本文讨论了在C++中如何在程序退出main函数后进行资源清理,以及如何获取程序退出后对象析构的时间。介绍了atexit()函数在C++中的使用,以及它如何与对象的析构函数结合,以实现程序退出时的特定操作。通过示例代码展示了atexit()调用顺序和对象析构的顺序。
摘要由CSDN通过智能技术生成

    曾经被问到过这样两个问题:

1> 在C/C++中,怎样在程序退出main函数后仍然进行一些操作,比如资源堆栈方面的清理?

2> 在C++程序中,我们要怎样才能够得到程序退出main后对象析构所需要的时间?

 

    我们知道,在C++中,全局对象或者main域中对象的析构,是在退出main函数后进行的。所以对于问题1,我们可以在一个全局对象的析构函数中调用相关的函数来实现。但是,C语言不支持对象,所以这种方法对于C程序就无能为力了。

 

    对于问题2,我们可以通过对象的构造与析构来勉强实现这一功能。我们可以定义两个类A,B,其中A的析构函数可以打印出当前时间,B的构造函数可以打印出当前时间,此外A,B什么也不做。如果我们在所有全局对象的实例定义前定义A的一个实例,而在main函数退出 (return 0 )前定义B的一个实例,那么这两个时间的差就是我们所要的。

 

    然而上述对问题2的解决是基于程序中没有调用exit()函数,若否,对象b就不会被创建,我们也就不能得到想要的时间了。

 

    其实C/C++的CRT中有一个回调函数atexit(...),可以用来注册需要在程序exit的时候需要调用的函数,详细请参考:

http://www.cprogramming.com/fod/atexit.html 或者C:/Program Files/Microsoft Visual Studio 8/VC/crt/src/atonexit.c:123

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值