处理几乎所有C++中的异常

Jus*_* R. 0 c++ exception-handling c++98

我有一个try块,它目前捕获所有异常:

try
{
    // do some work
}
catch (std::exception &ex)
{
    // log ex
}
Run Code Online (Sandbox Code Playgroud)

但是,我不想捕获访问冲突.我可以将其指定为我的处理程序的异常(可以这么说)吗?或者我应该先抓住它并重新抛出它?

Lig*_*ica 9

您已经没有 catch违反访问权限,而且您永远无法访问.访问冲突不是C++异常.它们是不同类型的"例外" - 由您的操作系统引发.事实上,我宁愿不把它们称为"例外".

Linux和类似Linux的操作系统只是终止执行访问冲突的进程(使用信号).

Windows改为使用称为"结构化异常"的东西,您可以使用Visual Studio中的语言扩展来捕获并可能忽略这些异常.我们现在冒险离题,但你可以读一下这些.我还是不建议他们使用,请注意.一旦你有访问冲突,我个人会满足于说"所有赌注都已关闭","我们有一些调试要做".