【问题标题】:What are the disadvantages of having one base class for all exceptions?为所有异常使用一个基类有什么缺点?
【发布时间】:2017-04-01 11:48:50
【问题描述】:

我正在做 Stroustrup 的 C++ Programming Language 4th Edition 中的练习。其中一项任务是这样制定的:

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

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

【问题讨论】:

  • 这是一个基于意见的问题,取决于您如何看待异常的使用情况。他在写这篇文章时想到的缺点可能是它允许消费者编写不能真正解决异常情况的包罗万象的代码。

标签: c++ exception-handling base-class


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2012-10-14
    相关资源
    最近更新 更多