我有一些特殊的异常情况需要抛出和捕获,因此我希望定义自己的异常类。
那么最佳实践是什么?我应该继承自std::exception
还是std::runtime_error
?
我有一些特殊的异常情况需要抛出和捕获,因此我希望定义自己的异常类。
那么最佳实践是什么?我应该继承自std::exception
还是std::runtime_error
?
我不是C++开发人员,但我们在C#代码中做的一件事是为我们的框架创建一个基类异常,然后在构造函数中记录抛出的异常:
public FrameworkException(string message, Exception innerException)
: base(message, innerException)
{
log.Error(message, innerException);
}
...
当异常被放置在一些作用域内时,是非常好的。例如,类Manipulation可以在异常类Error内声明。
并且像这样捕获它们:
catch ( const Manipulation::InputError& error )
catch ( const Manipulation::CalculationError& error )
在我看来,从std::exception继承与否并不重要。对我来说,定义异常最重要的是:
这并没有太大的区别,因为std::runtime_error
也继承自std::exception
。你可以认为运行时错误更多地传达了关于异常的信息,但在实践中,人们经常只从基本异常类派生。
std::string
消息与其一起传递,那么使用std::runtime_error
构建异常是否更容易呢?这样做是否能够在定义子类时实现零规则? - Wolfstd::string
消息与其一起传递,那么使用std::runtime_error
构建异常会不会更容易呢?这样做是否可以在定义子类时实现零规则? - undefined