对于所有异常都有一个基类有什么缺点?
问题描述:
我正在从Stroustrup的C++编程语言第4版开始练习。其中一项任务是这样形成的:对于所有异常都有一个基类有什么缺点?
考虑使用类Exception作为用作例外的所有类的基础。它应该是什么样子?它应该如何使用?它可以做什么好? 要求使用这样的类可能会导致什么缺点?
答案看起来很像std::exception
,保存的缺点部分 - 唯一一个我能想象是__vptr
这通常可以忽略不计的成本。我在这里错过了什么?
答
缺点是,如果您尝试捕获继承树底部的异常,您将捕获从该继承树派生的所有异常,其中一些异常可能表明与您期望的事情非常不同。
更糟的是,一个开发人员使用了很多可能会抛出异常并且不知道其中某些意思的函数的开发人员可能会简单地捕获基类Exception,并在遇到错误时仅返回一个非特定的Exception实例,因此很难调试代码,并且可能导致整个程序失败,只是因为易于修复的异常不会导致任何问题。
这是一个基于意见的问题,取决于您如何查看例外情况。当他写这篇文章时,他想到的缺点可能是它允许消费者编写实际上并不能解决特殊情况的全部代码。 –