C ++异常处理被析构函数阻止

时间:2015-04-08 12:45:45

标签: c++ exception-handling destructor

我最近遇到了使用几个第三方库的问题。我的代码名为库A,它调用库B.当库B遇到错误时,它会抛出异常;这是首选行为,因为它不知道应该如何处理错误。库A将使用其虚拟析构函数中的RAII清理其内部资源。

由于这些资源对A中的类是私有的,我使用的是我无法提前清理资源。

现在在某些情况下,在我清理我正在使用的代码中,将调用A中的析构函数;然后又称B和B会抛出异常。

我想在我的代码中捕获此异常,因为我不想更改第三方库的代码。不幸的是,我发现异常处理代码不会将异常传播回我的代码,但会导致调用abort方法。

我最终更改了A的第三方代码以捕获并忽略所有可能的异常。

因为默认情况下gcc 4.8.1不通过析构函数传播异常,哪些主编译器和这些编译器的版本将会或不会通过析构函数传播异常?

1 个答案:

答案 0 :(得分:0)

我确实认为在标准的某处定义了从析构函数抛出的异常可以导致调用std::terminate,至少在C ++ 11中是这样。这是因为编译器将析构函数隐式标记为noexcept