首选的错误处理方法

Preferred method of error handling method

本文关键字:处理 方法 错误      更新时间:2023-10-16

我有一个基于文件的哈希表,它可能会遇到各种文件系统或用户错误。最初,我创建了所有的数据函数,如

bool add(int key, int value)
bool get(int key, int &value)

等等,其中输入/输出将通过参数传递,成功/失败将作为函数结果出现。

然后我有一些mmf包装器类,我需要在同一个项目中进行傻瓜验证,我意识到它们可能在构造函数中失败,在这种情况下返回bool不是一个真正的选项,所以我添加了一堆

if (!somethingthatindicatesfail) throw std::exception("description here");

所以现在我有一些在返回bool值的东西里面抛出异常的东西,然后有系统错误代码,我也需要包括在错误日志中。

乱糟糟的…我将重写所有失败场景逻辑,但在此之前,您首选的错误处理/传递方法是什么?

我想象的最终结果是一个模块,不会崩溃,但记录错误,防止进一步损坏数据,并建议用户关闭它。

正如您已经指出的,您不能使用构造函数的返回代码。所以,如果你想要一个适用于所有代码的方法,你唯一真正的选择就是异常处理。

但是,请注意,在某些情况下,最好直接中止。特别是,异常将尝试展开堆栈,但如果情况足够糟糕,可能会导致进一步的损害,终止(存在但不展开堆栈)是更好的选择。

对于这种情况,设置(例如)一个单独的看门狗来记录问题并在程序崩溃时重新启动程序是有意义的。作为一个独立的进程,即使程序本身被阻塞到它唯一合理的选择是中止的地步,它也可以合理地继续执行。