打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
exit(0),abort()的区别

exit():

在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。

会进行的清理工作包括:销毁所有static和global对象,清空所有缓冲区,关闭所有I/O通道。终止前会调用经由atexit()登录的函数,atexit如果抛出异常,则调用terminate()。

 

abort():

调用时,不进行任何清理工作。直接终止程序。

 

retrun:

调用时,进行stack unwinding,调用局部对象析构函数,清理局部对象。如果在main中,则之后再交由系统调用exit()。

 

return返回,可析构 main或函数中的局部变量,尤其要注意局部对象,如不析构可能造成 内存泄露。

exit返回不析构main或函数中的局部变量,但执行收工函数, 故可析构全局变量(对象)。

abort不析构main或函数中的局部变量,也不 执行收工函数,故全局和局部对象都不析构。 
    所以,用return更能避免内存泄露,在C++中用abort和exit都不是好 
习惯


对于exit函数,可以利用atexit函数为exit事件"挂接"另外的函数,这种"挂接"有点类似Windows编程中的"钩子"(Hook)。程序输出 "atexit挂接的函数"后即终止,即便是不调用exit函数,当程序本身退出时,atexit挂接的函数仍然会被执行。atexit可以被多次执行,并挂接多个函数,这些函数的执行顺序为后挂接的先执行。在Visual C++中,如果以abort函数(此函数不带参数,原型为void abort(void))终止程序,则会在debug模式运行时弹出错误提示的对话框。Linux中abort()会产生core   dump。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[C++]exit & abort & 析构 & 异常
VC错误处理技术学习:断言(ASSERT)
Visual C++中的异常处理浅析
出错处理函数abort、exit、atexit、strerror. . .
linux c开发: 在程序退出时进行处理
c语言,return,exit
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服