为所有异常设置一个基类有什么缺点?

sig*_*gil 8 c++ exception-handling base-class

我正在使用Stroustrup的C++编程语言第4版进行练习.其中一项任务是这样制定的:

考虑使用类Exception作为用作异常的所有类的基础.它应该是什么样的?该如何使用?这有什么用呢?要求使用这样的课程可能会有什么缺点?

答案看起来很像std::exception,除了缺点部分 - 我能想象的唯一一个__vptr通常被认为可以忽略不计的成本.我在这里错过了什么?

小智 1

缺点是,如果您尝试捕获位于继承树底部的异常,您将捕获从该异常派生的所有异常,其中一些异常可能表明与您预期的情况非常不同。

更糟糕的是,开发人员使用了很多可能引发异常的函数,并且不知道其中一些函数的含义,可能会简单地捕获基类 Exception,并在遇到错误时仅返回一个不特定的 Exception 实例,这使得开发变得困难调试代码,并且可能仅仅因为一个容易修复的异常而导致整个程序失败,但该异常不应导致任何问题。