这在C++中被认为是很好的编程实践吗:
try {
// some code
}
catch(someException) {
// do something
}
catch (...)
{
// left empty <-- Good Practice???
} 发布于 2010-06-03 22:55:06
不是的!这是一种可怕的做法!
只有在main()中才应该catch (...)而不是重新抛出异常,以便捕获任何未处理的异常,并在退出前显示或记录错误。
如果你使用catch (...),你完全不知道抛出了什么异常,因此你不知道继续运行是否安全。
发布于 2010-06-03 23:02:58
好的做法是:
try {
// some code
}
catch( const someException & e) {
// do something
}因为你知道你想要捕捉什么异常。
catch( ... )应该只在main()和线程的入口点(任何异常都不应该离开线程)中,当然是在catch( const std::exception &e)之后。
发布于 2010-06-03 22:55:44
这取决于你的应用程序和你想要解决的问题。但一般来说,接受未知的异常并不是一个好主意。至少,我会记录一些东西。
编辑析构:正如诺亚·罗伯茨所指出的,只有在析构函数中,这才是一个合理的想法。在析构函数中抑制异常很重要,否则可能会有多个异常处于活动状态。例如,如果抛出异常,并且由于堆栈展开而调用某些析构函数,则可能会发生这种情况。如果析构函数抛出一个异常,你将有两个活动的异常。然后,C++将调用std::terminate(),这将在默认情况下结束您的程序。您可以为这种情况安装一个处理程序,但是除了记录正在发生的事情之外,您可能没有什么可以做的。
尽管如此,即使在析构函数中,您也可能应该在catch (...)中记录一些内容。但是,根据析构函数的不同,您可能没有可用的日志记录工具。但在大多数情况下,您仍然可以使用std::cerr。
https://stackoverflow.com/questions/2967062
复制相似问题