我还没有找到这个问题的答案,但我几乎100%肯定有布局在某处。
我有一个普通的C++类,我正在使用第三方日志记录系统。 不幸的是,我有两个要求和三个事实是我无法匹配的:
要求:
事实:
pthread_mutex_lock
。下面是代码:
class myClass {
public:
myClass() {}
~myClass() {
LOG << "Destructor called!";
}
};
int main() {
myClass c;
sleep(1);
return 0;
}
当程序完成时,由于log
命令,会出现分段错误(即:如果我删除它,就没有segfault)。
在正常情况下,我需要这个日志函数来显示MyClass
何时被销毁,因此这里出现了一个简单的问题:
我是否可以在类(myClass)的析构函数中检测程序是否正在终止(或其他原因导致破坏)?
我可以在类(myClass)的析构函数中检测程序是否正在终止吗
是的,如果实例具有静态存储。 您可以使用std::atexit
注册一个函数,该函数将在静态对象销毁期间执行。 此函数可用于设置一个名称空间范围变量,该变量表示程序是否正在退出。 类的析构函数可以检查该变量的状态。
您必须确保在调用std::atexit
之前创建其析构函数依赖于该变量的实例。