【发布时间】:2020-11-09 16:36:25
【问题描述】:
我还没有找到这个问题的答案,但我几乎 100% 确定在某个地方已经布置好了。
我有一个普通的 C++ 类,并且我使用的是第 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 何时被破坏,所以这里有一个直截了当的问题:
如果程序终止(或其他原因是破坏的原因),我能否在类 (myClass) 的析构函数中检测到?
【问题讨论】:
-
你的
main()函数不应该返回一些东西吗? -
@vahancho 不,
main()是特殊的,如果控制到达此函数的末尾,编译器将隐式添加return 0;。 -
@vahancho 它在the standard
-
@vahancho From C++17 draft 6.6.1: "5. main 中的 return 语句具有离开 main 函数(销毁任何具有自动存储持续时间的对象)并调用 std::exit 的效果返回值作为参数。如果控制从 main 的复合语句的末尾流出,则效果等同于操作数为 0 的返回(另见 18.3)。"
标签: c++ destructor terminate