Ami*_*ira 24 c++ exception-handling exception
我正在开发一个项目,我们将旧的C代码重构为新的C++,我们正在使用异常进行错误处理.
我们正在为不同的模块创建不同的异常类型.
我认为这不值得,但我没有任何有效的论据来证明我的观点.因此,如果我们编写标准库,您将看到vector_exception,list_exception等.
在考虑这件事的时候,我偶然发现了这个问题:
什么时候应该创建自己的异常类型,何时应该坚持已在std库中创建的异常?
另外,如果我们采用上述方法,那么在不久的将来我们可能面临的问题是什么呢?
Use*_*ess 25
在以下情况下创建自己的异常类
catch子句.它们仍然应该有一个共同的基础,以便在适当的时候进行共同处理分开list和vector例外似乎并不值得,除非有一些类似于列表的东西或关于它们的矢量.你真的会根据哪种类型的容器出错而进行不同的捕获处理吗?
相反,对于可能在运行时可恢复的事物具有单独的异常类型可能是有意义的,而不是回滚但可以重试的事物,而不是那些绝对致命或指示错误的事物.
JVA*_*pen 10
在任何地方使用相同的例外很容易.特别是当试图抓住那个例外.不幸的是,它打开了口袋妖怪异常处理的大门.它带来了捕获您不期望的异常的风险.
对所有不同的模块使用专用的例外添加了几个优点:
我认为除了其他答案的原因可能是代码可读性,因为很多时候程序员花费支持它.考虑两段代码(假设它们抛出"空帧"错误):
void MyClass::function() noexcept(false) {
// ...
if (errorCondition) {
throw std::exception("Error: empty frame");
}
}
Run Code Online (Sandbox Code Playgroud)
void MyClass::function() noexcept(false) {
// ...
if (errorCondition) {
throw EmptyFrame();
}
}
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我认为它更具可读性,并且用户的消息(使用what()函数打印)隐藏在此自定义异常类中.
| 归档时间: |
|
| 查看次数: |
3835 次 |
| 最近记录: |