读书人

程序ctrl+c终止为何没有调用析构函数

发布时间: 2012-03-04 11:13:34 作者: rapoo

程序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
[解决办法]
不要企图优雅的结束(因为这是不可能办到的)
而要在烂的不能再烂的摊子上也能重整河山!
[解决办法]
不管程序执行到哪里,在收到信号后就立即结束了,还没来的及调用析构函数

读书人网 >C++

热点推荐