c++ - 错误处理方法的首选方法

标签 c++ error-handling

<分区>

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

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

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

然后我有一些 mmf 包装器类,我需要为同一个项目提供防呆功能,我意识到它们可能会在构造函数中失败,在这种情况下返回 bool 并不是一个真正的选择,所以我添加了一堆

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

给他们。

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

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

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

最佳答案

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

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

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

关于c++ - 错误处理方法的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24596984/

相关文章:

c++ - cout 不起作用时如何检测无限循环?

php - 自定义404 ErrorDocument路径在htaccess中不起作用

python - 引发AssertionError与断言python

python - 未找到资源点。请使用NLTK下载器获取资源: >>> import nltk >>> nltk.下载('punkt')

c++ - 删除在析构函数中不起作用?

c++ - 为什么 map::find 需要我的参数不是常量?

c++ - 尝试使用 dlopen 加载库时 undefined symbol

c++ - cmake add_dependency、add_custom_command 和 add_custom_target 不能一起工作

javascript - 解析错误消息 "react-dom.development.js:4091 Uncaught TypeError: onItemSelect is not a function"

php - Heroku,我正在尝试将Google2fa添加到我的Heroku Web服务器中,但它的响应是419页已过期