首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

程序ctrl+c终止,为何没有调用析构函数啊该如何解决

2012-03-04 
程序ctrl+c终止,为何没有调用析构函数啊?菜鸟问题,求教。#include stdio.h#ifdef _WIN32#include window

程序ctrl+c终止,为何没有调用析构函数啊?
菜鸟问题,求教。

#include <stdio.h>
#ifdef _WIN32
# include <windows.h>
# define sleep(x) Sleep(x)
#else
#include <unistd.h>
# define sleep(x) usleep((x) * 1000)
#endif

class A
{
  FILE *fp;
public:
  A()
  {
  fp=fopen("test.txt","wb");
  fwrite("1",1,1,fp);
  }
  ~A()
  {
  printf("in destruct function\n");
  fwrite("2",1,1,fp);
  fclose(fp);
  }
};

int main()
{

  A a;

  sleep(10 * 1000);

  return 0;
}

Ctrl+c终止后,发现析构函数未被调用。

[解决办法]
linux下Ctrl+c给进程发出SIGINT信号
如果你不对这个信号处理的话 默认的动作就是结束进程退出
你需要自己处理这个信号,以便让程序正常退出
[解决办法]
windows下要用SetConsoleCtrlHandler处理CTRL_C_EVENT
[解决办法]
不要企图优雅的结束(因为这是不可能办到的)
而要在烂的不能再烂的摊子上也能重整河山!
[解决办法]
不管程序执行到哪里,在收到信号后就立即结束了,还没来的及调用析构函数

热点排行