您的位置:首页 > 编程语言 > C语言/C++

C\C++ 变量生存周期

2017-05-12 22:36 113 查看
程序入口地址为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掉。

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

 垃圾回收机制: 在单例模式下 可以采用此析构函数进行析构
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息