【发布时间】:2011-02-23 19:55:14
【问题描述】:
我注意到 gcc 的析构函数在 linux 下编译并与 mingw 交叉编译时的行为有所不同。
在 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");
}
【问题讨论】:
-
好吧,让析构函数在每个情况下都被调用是不可能的。例如,
SIGKILL永远不会被发送到您的程序。操作系统只会将其抹去。
标签: c gcc mingw destructor