gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:10 25 4
gpt4 key购买 nike

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

由于这些资源对 A 中的类是私有(private)的,所以我正在使用我无法提前清理资源。

现在,在清理我在代码中使用的类期间的特定情况下,将调用 A 中的析构函数;反过来调用 B 和 B 会抛出异常。

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

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

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

最佳答案

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

关于被析构函数阻止的 C++ 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29515012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com