定义自己的异常类的最佳实践?

Fra*_*ank 33 c++ error-handling inheritance exception

我有一些特殊的异常情况,我想抛出并捕获,所以我想定义自己的异常类.

有什么最好的做法?我应该继承std::exception还是std::runtime_error

sth*_*sth 26

是的,这是很好的做法,继承std::runtime_error其他标准的异常类一样std::logic_error,std::invalid_argument等等,这取决于哪种例外的是.

如果所有异常都从某种方式继承,std::exception那么很容易通过a捕获所有常见错误catch(const std::exception &e) {...}.如果你有几个独立的层次结构,这会变得更加复杂.从专门的异常类派生会使这些异常带来更多信息,但这实际上有多么有用取决于您如何进行异常处理.

  • 抓住const ref:catch(std :: exception const&e) (7认同)

si6*_*618 6

我不是C++开发人员,但我们在C#代码中做的一件事是为我们的框架创建一个基类异常,然后记录构造函数中抛出的异常:

  public FrameworkException(string message, Exception innerException)
      : base(message, innerException)
  {
      log.Error(message, innerException);
  }

  ...
Run Code Online (Sandbox Code Playgroud)

任何派生异常只需调用它的基本构造函数,我们就可以获得一致的异常日志记录.没什么大不了的,但很有用.