gpt4 book ai didi

c++ - exit() 和 abort() 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 11:33:44 33 4
gpt4 key购买 nike

在 C 和 C++ 中,exit()abort() 有什么区别?我正在尝试在出现错误(不是异常)后结束我的程序。

最佳答案

abort()退出程序而不调用使用 atexit() 注册的函数首先,并且不首先调用对象的析构函数。 exit()在退出你的程序之前做这两个。但它不会为自动对象调用析构函数。所以

A a;
void test() {
static A b;
A c;
exit(0);
}

会正确地析构ab,但不会调用c的析构函数。 abort() 不会调用这两个对象的析构函数。不幸的是,C++ 标准描述了另一种确保正确终止的机制:

Objects with automatic storage duration are all destroyed in a program whose function main() contains no automatic objects and executes the call to exit(). Control can be transferred directly to such a main() by throwing an exception that is caught in 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);

关于c++ - exit() 和 abort() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/397075/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com