我有一些特殊的异常情况,我想抛出并捕获,所以我想定义自己的异常类.
有什么最好的做法?我应该继承std::exception
还是std::runtime_error
?
是的,这是很好的做法,继承从std::runtime_error
或其他标准的异常类一样std::logic_error
,std::invalid_argument
等等,这取决于哪种例外的是.
如果所有异常都从某种方式继承,std::exception
那么很容易通过a捕获所有常见错误catch(const std::exception &e) {...}
.如果你有几个独立的层次结构,这会变得更加复杂.从专门的异常类派生会使这些异常带来更多信息,但这实际上有多么有用取决于您如何进行异常处理.
我不是C++开发人员,但我们在C#代码中做的一件事是为我们的框架创建一个基类异常,然后记录构造函数中抛出的异常:
public FrameworkException(string message, Exception innerException) : base(message, innerException) { log.Error(message, innerException); } ...
任何派生异常只需调用它的基本构造函数,我们就可以获得一致的异常日志记录.没什么大不了的,但很有用.