关于c ++ try -catch

And*_*ind 2 c++ exception

我在一个大型项目中读取代码,其中包含许多代码,例如:

try
{
}
catch(...)
{
}
Run Code Online (Sandbox Code Playgroud)

从字面上看,在"捕获"之后的括号中,其中有"......".不像"例外e".

这让我有点担心.这种做法是好还是安全?谢谢.

Jam*_*lis 11

不,这是一种可怕的做法.

如果你catch(...),你不知道你抓到了什么.它捕获所有C++异常(在某些平台上有一些设置,它也捕获其他异常,如Visual C++中的结构化异常).

如果你不知道抛出了什么异常,你就不知道系统的状态是什么:你怎么知道程序继续运行是否安全?

退出catch(...)块绝对安全的唯一两种方法是终止程序或重新抛出异常(使用throw;).如果您在抛出异常时需要执行一些清理但不能依赖析构函数,则后者偶尔会有用.

  • 如果你需要做一些清理是合理的,并且在完成后使用`throw;`重新抛出.当然,使用RAII类会更好. (3认同)