C\C++ 变量生存周期

程序入口地址为main 那么 全局变量的生存周期和释放会是在什么时候

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;


void writeFile(char *pszbuf){
	FILE *fp = fopen("cxl.txt", "ab+");
	fwrite(pszbuf, strlen(pszbuf),  1,fp);
	fflush(fp);
	fclose(fp);
}


class A{
public:
	A(){
		writeFile("A类开始初始化.......\n");
	}
	~A(){
		writeFile("A类被析构.......\n");
		
		char buf[200] ={0};
		sprintf(buf, "pl 地址:%p.......\n", p);
			writeFile(buf);
	}
	void set(char *pl){
		
		char buf[200] ={0};
		p = pl;
		sprintf(buf, "pl 地址:%p.......\n", p);
			writeFile(buf);
	}
private:
	char *p;
	
};

class B{
public:
	B(){
		writeFile("B类开始初始化.......\n");
	}
	~B(){
		writeFile("B类被析构.......\n");
	}
};

A a;
B b;

int main(){
	
	writeFile("程序入口开始.......\n");
	
	char buf[100] ={0};
	char *p = new char[20];
	memcpy(p,"cxl...hahah",20);
	sprintf(buf, "p 地址:%p.......\n", p);
	writeFile(buf);
		writeFile("set p.......\n");
	a.set(p);
	writeFile("程序入口结束end.......\n");
	
	return 0;
}

改函数的 执行结果:

A类开始初始化.......
B类开始初始化.......
程序入口开始.......
p 地址:00473C30.......
set p.......
pl 地址:00473C30.......
程序入口结束end.......
B类被析构.......
A类被析构.......
pl 地址:00473C30.......

从中可以看到,在执行main 之前先进行了 全局变量的初始化,按上到下顺序执行,然后才是main 函数,而析构则是 下到上。 其中在main中new 出来的p 则在main结束后依然存在,在关闭程序后,查看该内存,则显示内存内容为乱码,说明已经被操作系统释放掉了,如果在没有操作系统的情况下 我们还是要记得 delete掉。


这个全局初始化和 析构的作用:

 垃圾回收机制: 在单例模式下 可以采用此析构函数进行析构

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值