对所有异常使用一个基类的缺点是什么?
What are the disadvantages of having one base class for all exceptions?
我正在做Stroustrup的c++编程语言第4版的练习。其中一个任务是这样表述的:
考虑使用Exception类作为所有用作异常的类的基类。它应该是什么样子?它应该如何使用?这有什么好处呢?使用这样的类可能会导致什么缺点?
答案看起来很像std::exception
,除了缺点部分-我唯一能想到的是__vptr
的成本,通常被认为可以忽略不计。我遗漏了什么?
缺点是,如果您试图捕获位于继承树底部的异常,则将捕获从该异常派生的所有异常,其中一些异常可能指示与您期望的非常不同的事情。
更糟糕的是,如果一个开发人员使用了很多可能抛出异常的函数,而不知道其中一些异常的含义,那么他可能会简单地捕获基类Exception,并在遇到错误时返回一个不特定的Exception实例,这使得调试代码变得困难,并且可能导致整个程序失败,仅仅因为一个容易修复的异常,而这个异常本不应该引起任何问题。
相关文章:
- 如何定义一个纯抽象基类
- 当基类是依赖类型时,这是一个缺陷吗
- 一个Q_PROPERTY可以泛化为多个基类吗?
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 两个抽象类,派生自同一个基类.如何访问从一个抽象类到另一个抽象类的指针
- C++多态性:如何测试一个类是否派生自另一个基类
- 派生类不能用另一个基类的成员重载基类中的私有成员
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 为什么第一个Dynamic_cast没有投射到基类?
- 如果我们有一个基*类,如何访问派生模板类的成员函数
- 如何构建一个 Map,其中键是抽象基类(而不是值)
- C :基类调用自己的虚拟函数 - 一个反图案
- 使从一个基类派生的类能够使用继承的受保护成员
- 摧毁一个不可破坏的基类?
- CRTP - 是否可以创建一个抽象基类?
- 无法从派生的一个方法调用基类方法
- 将函数上调整到基类参数的另一个
- 动态创建一个继承的类,使用STD :: MAP使用基类指针访问
- 如何创建一个动态数组,该数组可以保存从C++中派生的同一基类的所有不同对象
- 如何从另一个类的基类访问派生类中的受保护成员