exit(0)析构函数不被执行

在编辑储存文件的时候突然发现一个bug,

为什么我在析构函数里编辑了存储程序却无法储存?

仔细看了一下代码发现正常运行到exit(0)后就结束了,

难道exit(0)后,直接退出程序,就不执行析构函数了吗?

对此我写了简单的代码测试了一下,结果是exit(0);后析构函数不在被执行!

#include <iostream>
using namespace std;
#include <fstream>
class fun
{
public:
	fun();
	~fun();
	int m_rate;
};
fun::fun()
{
	m_rate = 0;
	fstream f;
	f.open("storge.text", ios::in);
	f >> m_rate;
	f.close();
}
fun::~fun()
{
	fstream f;
	f.open("storge.text", ios::out);
	f << m_rate;
	f.close();
}

int main()
{
	fun a;
	cout << a.m_rate << endl;
	cin >> a.m_rate;
	exit(0);	//如果不exit(0),数据正常保存到文件里。
				//exit(0)后析构函数不再被执行,数据不会被保存
	return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在C语言中,使用Ctrl+C键盘组合键发送一个SIGINT信号,代表中断程序执行。当程序接收到SIGINT信号时,触发相应的信号处理函数。对于Ctrl+C后执行析构函数的问题,我们需要了解一些相关的知识。 首先,C语言中没有类的概念,因此也没有析构函数析构函数是面向对象编程中的概念,用于在对象被销毁之前执行一些清理工作。在C++中,对象的析构函数在对象被销毁时自动调用。 在C语言中,可以使用signal函数来注册信号处理函数,用于处理接收到的信号。对于SIGINT信号,我们可以注册一个处理函数,当程序接收到该信号时,执行一些清理操作,例如释放动态分配的内存、关闭文件等。 示例代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <signal.h> void cleanup() { // 执行清理操作,例如释放动态分配的内存、关闭文件等 printf("执行清理操作...\n"); // 这里可以写执行析构函数的代码 exit(0); } void sigint_handler(int signum) { // Ctrl+C后执行的信号处理函数 printf("接收到SIGINT信号...\n"); cleanup(); } int main() { // 注册SIGINT信号的处理函数 signal(SIGINT, sigint_handler); // 其他代码逻辑... while (1) { // 程序执行逻辑... } return 0; } ``` 在以上示例中,我们注册了一个SIGINT的信号处理函数sigint_handler。当程序接收到SIGINT信号时,进入该处理函数。在sigint_handler函数中,可以执行一些清理操作,例如释放动态分配的内存等。 需要注意的是,调用exit函数终止程序执行,并且不调用任何的析构函数。因此,如果你希望执行C++中的析构函数,需要使用C++来编写程序,并在signal处理函数中手动调用析构函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值