0

我有一个当前捕获所有异常的 try 块:

try
{
    // do some work
}
catch (std::exception &ex)
{
    // log ex
}

但是,我不想捕获访问冲突。我可以将其指定为我的处理程序的例外(可以这么说)吗?还是我应该先抓住它然后再扔?

4

1 回答 1

10

您已经没有 catch违反访问权限,而且您永远也无法做到。访问冲突不是 C++ 异常。它们是由操作系统引发的不同类型的“异常”。事实上,我根本不想称它们为“例外”。

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

Windows 改为使用称为“结构化异常”的东西,您可以使用 Visual Studio 中的语言扩展来捕获和忽略这些异常。我们现在冒险跑题了,但你可以阅读这些。请注意,我仍然不推荐使用它们。一旦您遇到访问违规,我个人会满足于说“所有赌注都关闭”,并且“我们需要进行一些调试”。

于 2014-01-09T18:18:25.123 回答