在C和C++中,有什么区别exit()
and abort()
?我试图在发生错误(不是例外)后结束我的程序。
abort() http://en.cppreference.com/w/c/program/abort退出程序而不调用使用注册的函数atexit() http://en.cppreference.com/w/c/program/atexit首先,并且不首先调用对象的析构函数。exit() http://en.cppreference.com/w/c/program/exit在退出程序之前执行这两项操作。但它不会调用自动对象的析构函数。所以
A a;
void test() {
static A b;
A c;
exit(0);
}
会破坏a
and b
正确地,但不会调用析构函数c
. abort()
不会调用这两个对象的析构函数。不幸的是,C++ 标准描述了一种确保正确终止的替代机制:
具有自动存储期限的对象都在一个程序中被销毁,该程序的功能main()
不包含自动对象并执行调用exit()
。控制权可以直接转移到这样的main()
通过抛出一个被捕获的异常main()
.
struct exit_exception {
int c;
exit_exception(int c):c(c) { }
};
int main() {
try {
// put all code in here
} catch(exit_exception& e) {
exit(e.c);
}
}
而不是打电话exit()
,安排该代码throw exit_exception(exit_code);
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)