通常,当我想创建自己的异常时,我继承自 std::exception
或 std::runtime_error
。
有什么能阻止我创建自己的空“标签类”吗?
class out_of_bounds_access {}; // or:
class memory_leak {};
然后扔那个?
毕竟,大多数情况下,是类名携带了有关出错的信息,而不是异常类的成员。
好吧,所以我认为这是个坏主意,但为什么呢?为什么这是个坏主意?
附言我知道在某些情况下,“定制的”异常携带信息,后者用于确定解决问题的正确方法......
然而,如果你仔细想想,像这样的情况可以经常(不总是,但经常)被重新处理以抛出和捕获多个不同的标签类,而不是只有一个标签类(带有“内容”)。
最佳答案
不,没有什么能阻止你这样做。
但是,一些想要捕获“任何异常”的代码将捕获 const std::exception&
,如果您的异常类型不是从 std::exception
派生的> 那将行不通。
当然,我们可以捕获 ...
,但根据我的经验,这被用作避免由于未捕获的异常而终止的最后一道“钝器”,并且不能告诉你关于异常本身的任何事情。
Boost 异常不是从 std::exception
派生的,它真的很烦人。
为什么不让所有异常成为这个标准层次结构的一部分?
如果您不打算让您的异常类型一直到顶部,那么这里可能没有实际问题。但是,为什么要冒险呢?通过添加 : std::runtime_error
或类似的东西,您不会有任何损失,您将传递给基础的文本字符串对于诊断程序员来说是有用的信息。
关于c++ - 当前形式的 `std::exception` 是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53593701/