return、exit和abort的区别
2016-11-18 15:46
288 查看
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。 |
相关文章推荐
- C++中的return, exit 与 abort 的区别
- return abort exit函数的区别
- exit abort return 区别 http://blog.csdn.net/qingyue_bao/article/details/6577087
- exit abort return 区别
- exit(),_exit(),return,abort()函数的区别
- abort,exit,return 的区别
- exit、_exit、abort、return的区别
- return、exit和abort的区别
- exit、_exit、abort、return的区别
- exit abort return 区别
- exit()函数,_exit()函数,return关键字,abort()函数的区别
- (转)exit abort return 区别
- C++ 中exit(),_exit(),return,abort()函数的区别
- exit和return的区别
- 解析php中die(),exit(),return的区别
- delphi中exit,abort,break,continue 的区别
- exit和return的区别
- . System.exit(0)和System.exit(1) 和return 区别
- exit()函数详解与Exit() 和 Return() 的区别
- C语言中exit()与return的区别