【发布时间】:2011-06-08 15:17:26
【问题描述】:
假设您在封装 pthread 互斥调用的互斥类中有以下析构函数:
~mutex()
{
pthread_mutex_destroy(&m_mutex);
}
如果失败(返回非零),我们显然不能抛出异常。我们如何最好地处理这个问题?
【问题讨论】:
假设您在封装 pthread 互斥调用的互斥类中有以下析构函数:
~mutex()
{
pthread_mutex_destroy(&m_mutex);
}
如果失败(返回非零),我们显然不能抛出异常。我们如何最好地处理这个问题?
【问题讨论】:
写入错误消息并调用 abort()。当不可能的事情似乎已经发生时,硬而明显的失败通常比继续愉快地继续更可取。
【讨论】:
我认为除了忽略它(可能会记录一条消息,尤其是当您收到 EBUSY 时,因为这可能表明您的程序中存在严重的逻辑错误)之外,您无能为力。
【讨论】:
你可以看看 boost::threads: 如果你正在构建发布 - 将不会检查返回代码,如果你正在构建调试版本 - 将调用 abort() 并打印错误消息,BOOST_VERIFY 是用户这个
【讨论】:
在我看来,在这种情况下,唯一理智的追索权是 assert(3) - 出了严重的问题,所以必须有人调查......
【讨论】:
我建议使用运行时断言。如果它失败了,你就处于 posix 的未定义行为领域。
【讨论】:
它在析构函数中的事实是无关紧要的。问题是如果破坏失败,您将无法恢复(忽略它除外)。无论您使用哪种语言,情况总是如此。
【讨论】: