代码之家  ›  专栏  ›  技术社区  ›  PatrykB

当前形式的“std::exception”是多余的吗?

  •  9
  • PatrykB  · 技术社区  · 7 年前

    通常,当我想创建自己的异常时,我从 std::exception std::runtime_error .

    是否有任何东西阻止我创建自己的空“标记类”?

    class out_of_bounds_access {}; // or:
    class memory_leak {};
    


    毕竟,大多数情况下,是类名携带了有关出错原因的信息,而不是异常类的成员。

    好吧,我认为这是个坏主意,但为什么呢?为什么这是个坏主意?

    另外,我知道在某些情况下,“定制”异常包含信息,后者用于确定解决问题的正确方法。。。

    1 回复  |  直到 7 年前
        1
  •  26
  •   Lightness Races in Orbit    7 年前

    不,没有什么能阻止你这么做。

    const std::exception& ,如果您的异常类型不是从 std::exception 那就不行了。

    ... 相反,根据我的经验,这被用作避免因未捕获的异常而终止的最后一道“钝器”,并且不能告诉您有关异常本身的任何信息。

    异常 而且是 .

    为什么不把所有的异常都作为这个标准层次结构的一部分呢?

    : std::runtime_error 或者诸如此类,您将传递到基的文本字符串对于诊断程序员来说是有用的信息。