我可以在C ++中实现全局异常处理吗? 我的要求是try ...在一段代码中没有使用catch块,那么应该有一个全局异常处理程序来处理所有未捕获的异常。
我可以实现吗,请提出宝贵的建议:)
答案 0 :(得分:5)
我总是将最外面的函数包装在try-catch中,如下所示:
int main()
{
try {
// start your program/function
Program program; program.Run();
}
catch (std::exception& ex) {
std::cerr << ex.what() << std::endl;
}
catch (...) {
std::cerr << "Caught unknown exception." << std::endl;
}
}
这将抓住一切。 C ++中的良好异常处理不是关于编写try-catch,而是要抓住你知道如何处理它的地方(就像你似乎想要做的那样)。在这种情况下,唯一要做的就是将错误消息写入stderr,以便用户可以对其进行操作。
答案 1 :(得分:4)
在C ++中,当未捕获异常时调用terminate
函数。您可以使用set_terminate
函数安装自己的终止处理程序。缺点是你的终止处理程序可能永远不会返回;它必须使用某些操作系统原语终止您的程序。默认只是调用abort()
答案 2 :(得分:3)
您可以使用set_terminate
和current_exception()
答案 3 :(得分:0)
当引发异常时,如果未在该点捕获,则它会上升到层次结构,直到它实际被捕获为止。如果没有代码来处理异常,则程序终止
您可以在终止之前运行特定代码,以使用您自己的set_unexpected
或set_terminate