GCC析构函数行为

时间:2010-05-25 17:55:57

标签: c gcc mingw destructor

我注意到在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");
}

1 个答案:

答案 0 :(得分:5)

来自Window上的进程管理器的kill类似于Linux上的kill -9 - 该程序没有机会进行清理。

相关问题