c++ - 为所有异常使用一个基类有什么缺点?

标签 c++ exception-handling base-class

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

Consider using a class Exception as the base of all classes used as exceptions. What should it look like? How should it be used? What good might it do? What disadvantages might result from a requirement to use such a class?

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

最佳答案

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

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

关于c++ - 为所有异常使用一个基类有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40663318/

相关文章:

c++ - boost::variant 访问者选择了错误的重载

c++ - 如何获得 if 表达式的哪一部分为真?

java - 为什么 try..finally 阻止不将原始异常注册为抑制?

c# - 捕获通用的非致命异常

windows - 禁止将 EXCEPTION_DEBUG_EVENT 传递给附加的调试器

c++ - 构造函数参数问题C++

c++ - 在 Qt 中使用 C++ 创建 mysql 触发器

c# - 创建与现有对象具有相同类型的类的实例

c# - 在 C# 中跨类强制方法命名一致性

c++ - 在基类中调用同名方法