对所有异常使用一个基类的缺点是什么?

What are the disadvantages of having one base class for all exceptions?

本文关键字:基类 一个 缺点 是什么 异常      更新时间:2023-10-16

我正在做Stroustrup的c++编程语言第4版的练习。其中一个任务是这样表述的:

考虑使用Exception类作为所有用作异常的类的基类。它应该是什么样子?它应该如何使用?这有什么好处呢?使用这样的类可能会导致什么缺点?

答案看起来很像std::exception,除了缺点部分-我唯一能想到的是__vptr的成本,通常被认为可以忽略不计。我遗漏了什么?

缺点是,如果您试图捕获位于继承树底部的异常,则将捕获从该异常派生的所有异常,其中一些异常可能指示与您期望的非常不同的事情。

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