【问题标题】:GCC destructor behaviourGCC 析构函数行为
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 我明白了。并且在系统关闭时,我认为清理是可能的,因为它不会是一个硬“kill -9”?
  • 如果您需要停止/启动信号,我建议您连接到 Windows 服务框架或 Linux 上的 inittab。
猜你喜欢
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
相关资源
最近更新 更多