提问者:小点点

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


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

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

要求:

  1. 在析构函数中记录某些内容
  2. 清理程序终止(不崩溃)

事实:

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

下面是代码:

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

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

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

在正常情况下,我需要这个日志函数来显示MyClass何时被销毁,因此这里出现了一个简单的问题:

我是否可以在类(myClass)的析构函数中检测程序是否正在终止(或其他原因导致破坏)?


共1个答案

匿名用户

我可以在类(myClass)的析构函数中检测程序是否正在终止吗

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

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

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|检测|析|构|函数|结尾|程序)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?