c++ - 为什么程序员要同时使用 std::bad_alloc 和 std::exception。仅 std::exception 是不够的

标签 c++ exception

考虑以下代码片段

try {
    goesWrong();
}
catch (const std::bad_alloc &e)
{
    std::cout << "Catching bad_alloc: " << e.what() << std::endl;
}
catch (const std::exception &e)
{
    std::cout << "Catching exception: " << e.what() << std::endl;
}

为什么我们需要捕获很多个别异常。最后的 std::exception 足以捕获所有异常,不是吗?为什么当 std::exception 无论如何都要捕获它时,额外的 4 行代码来显式捕获 std::bad_alloc

最佳答案

Why do we need to catch a lot of individual exceptions.

一般来说,因为根据捕获的异常类型允许不同的行为。

在这种情况下,有必要这样做,因为这种可能性没有被利用。

例如,考虑在内存中分配大型缓存的情况。在这种情况下,当捕获 std::bad_alloc 时,您可能会释放缓存并重试,而这种方法在其他异常情况下就没有用了。

关于c++ - 为什么程序员要同时使用 std::bad_alloc 和 std::exception。仅 std::exception 是不够的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52869774/

相关文章:

c++ - 错误 : no matching function for call to 'begin(long double [nPoints])' ; initializing vector with a hardcoded int versus an integer variable

c++ - C++ COM(ATL)中添加新接口(interface)需要注意什么

exception - 将 Ada 标量类型与子类型进行比较时,是否需要进行范围检查?

java - 继续提示直到满足标准

javascript - 为不同语言和平台制作库的有效方法

c++ - 链接到 Visual Studio 2010 中的静态库

c++ - 作用域枚举的 "using namespace X"等效项?

由于未知原因引发 java.io.FileNotFoundException

java - ClassNotFoundException 错误。 Eclipse IDE 出现问题

android - 如何捕获没有互联网异常错误?