通常,当我想创建自己的异常时,我继承自std::exception或std::runtime_error.
是否有什么阻止我创建自己的空"标签类"?
class out_of_bounds_access {}; // or:
class memory_leak {};
Run Code Online (Sandbox Code Playgroud)
并抛出那个?
毕竟,大多数情况下,它是带有关于错误的信息的类名,而不是异常类的成员.
好的,所以我认为这是一个坏主意,但为什么呢?为什么这是一个坏主意?
PS我知道有些情况下"定制"异常带有后者用于确定解决问题的正确方法的信息......
但是,如果你考虑一下,这样的情况可能很常见(并非总是如此) ,但经常),重新完成抛出和捕获多个不同的标记类而不是只有一个(带有"内容").
Lig*_*ica 26
不,没有什么能阻止你做这件事.
但是,一些想要捕获"任何异常"的代码将会捕获const std::exception&,如果您的异常类型不是std::exception从那时派生的,则无效.
当然,我们可以接受,...但根据我的经验,这是用作避免由于未捕获的异常而终止的最后一个"钝器",并且无法告诉您有关异常本身的任何信息.
提升异常并非源自,std::exception而且真的很烦人.
为什么不将所有异常作为此标准层次结构的一部分?
如果你不打算让你的异常类型一直到顶部,那么这里可能没有实际问题.但是,为什么要冒这个机会呢?通过添加: std::runtime_error或者某些东西你没有任何损失,你传递给基础的文本字符串是诊断程序员的有用信息.