C ++检测以析构函数结尾的程序

C++ detect program ending in destructor

我还没有找到这个问题的答案,但我几乎 100% 确定某处有布局。

我有一个普通的 C++ class,我正在使用第 3 方日志系统。 不幸的是,我有 2 个要求和 3 个我无法匹配的事实:

要求:

  1. 在析构函数中记录一些东西
  2. 干净地处理程序终止(没有崩溃)

事实:

  1. 第 3 方日志系统在程序终止时崩溃,因为它调用 pthread_mutex_lock
  2. 我不想更改此日志记录系统
  3. 我也不想深究

代码如下:

class myClass {
public:
  myClass() {}
  ~myClass() {
    LOG << "Destructor called!";
  }
};

int main() {
  myClass c;
  sleep(1);
  return 0;
}

当程序完成时,由于 LOG 命令出现段错误(即:如果我删除它,则没有段错误)。

在正常情况下,我需要这个日志函数来显示 myClass 何时被破坏,所以这里有一个简单的问题:

我能否以某种方式在 class (myClass) 的析构函数中检测程序是否正在终止(或者其他原因是破坏的原因)?

Can I somehow detect in the destructor of a class (myClass) if program is terminating

是,如果实例有静态存储。您可以使用 std::atexit 注册一个将在销毁静态对象期间执行的函数。此函数可用于设置表示程序是否正在退出的名称空间范围变量。 class 的析构函数可以检查该变量的状态。

您必须确保在调用std::atexit之前创建了其析构函数依赖于变量的实例。