C ++检测以析构函数结尾的程序
C++ detect program ending in destructor
我还没有找到这个问题的答案,但我几乎 100% 确定某处有布局。
我有一个普通的 C++ class,我正在使用第 3 方日志系统。
不幸的是,我有 2 个要求和 3 个我无法匹配的事实:
要求:
- 在析构函数中记录一些东西
- 干净地处理程序终止(没有崩溃)
事实:
- 第 3 方日志系统在程序终止时崩溃,因为它调用
pthread_mutex_lock
。
- 我不想更改此日志记录系统
- 我也不想深究
代码如下:
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
之前创建了其析构函数依赖于变量的实例。
我还没有找到这个问题的答案,但我几乎 100% 确定某处有布局。
我有一个普通的 C++ class,我正在使用第 3 方日志系统。 不幸的是,我有 2 个要求和 3 个我无法匹配的事实:
要求:
- 在析构函数中记录一些东西
- 干净地处理程序终止(没有崩溃)
事实:
- 第 3 方日志系统在程序终止时崩溃,因为它调用
pthread_mutex_lock
。 - 我不想更改此日志记录系统
- 我也不想深究
代码如下:
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
之前创建了其析构函数依赖于变量的实例。