在类中抛出异常的最佳方法是什么?

时间:2018-03-03 04:53:21

标签: c++ class c++11 error-handling try-catch

在类中抛出异常时,确保在类中捕获此异常是程序员的工作吗?或者最佳做法是假设此异常将在主文件/跑步者程序中捕获?我相信它是后者,但我有点不确定....请使用以下代码:

#include <stdexcept>
#include <iostream>

using namespace std; // supposedly trustworthy duck

class Duck
{
public:
      Duck(int quack_nominee);
private:
      int quack_strength;
};

Duck::Duck(int quack_nominee)
{
     if (quack_nominee < 0)
     {
             throw runtime_error("A quack having a negative value produces undefined behavior on reality.");
     }

     quack_strength = quack_nominee;
}

以上代码是否良好实践?我假设抛出的runtime_error将被捕获到某处。如果使用我的类的程序员没有实现try-catch块,则.exe文件将崩溃(至少在我的IDE和编译器上)。

另外,如果我在类本身中应该有一个try-catch块,是否可以合法地实现它?

1 个答案:

答案 0 :(得分:2)

异常的全部要点是终止函数的执行流程并通知调用者在函数内无法处理的错误条件。所以不,你绝对不必抓住自己的例外,因为它违背了例外的目的。

另一个问题是您应该使用例外报告哪种错误。这主要取决于具体的使用案例,但最常见的情况是无效的输入参数或外部错误(例如来自操作系统或数据库或程序之外的任何内容),如果不违反最少的原则,则无法在您的功能中处理惊讶&#34;