我注意到在 linux 下编译和使用 mingw 交叉编译时,gcc 的析构函数的行为有所不同。
在 linux 上,除非程序自行正常终止(从 main
返回),否则不会调用析构函数。如果将信号处理程序考虑在内,我想这是有道理的。
然而,在 Win32 上,如果程序被 CTRL-C 终止,则调用析构函数,但当从任务管理器中终止时则不会。
这是为什么?无论进程如何终止,您会建议如何调用析构函数 - 特别是在 Win32 上?
示例代码:
#include <stdio.h>
int main(int argc, char **argv) {
printf("main\n");
while(1) {}
return 0;
}
__attribute__((destructor)) static void mydestructor(void) {
printf("destructor\n");
}
最佳答案
Window 上进程管理器的 kill 类似于 Linux 上的 kill -9 - 程序没有机会进行清理。
关于c - GCC 析构函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907158/