abort,exit,return 的区别

xiaoxiao2021-02-28  94

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都不是好 习惯.

转载请注明原文地址: https://www.6miu.com/read-67902.html

最新回复(0)