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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在类中抛出异常的最佳方法是什么?相关的知识,希望对你有一定的参考价值。

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

#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块,是否可以合法地实现它?

答案

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

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

以上是关于在类中抛出异常的最佳方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

如何从线程中捕获异常

注册方法在我的控制器类中抛出空指针异常

在线程中处理在 catch 块中抛出的异常的最佳实践。 (。网)

类中的装饰器在Pycharm中抛出警告

C#如何在中间层类中抛出异常时获得控制焦点

java中 方法中抛出异常处理方法