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掉。
这个全局初始化和 析构的作用:
垃圾回收机制: 在单例模式下 可以采用此析构函数进行析构
代码:
#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掉。
这个全局初始化和 析构的作用:
垃圾回收机制: 在单例模式下 可以采用此析构函数进行析构
相关文章推荐
- C++中变量的生存周期
- c++循环语句中变量的生存周期
- C++变量生存周期演示
- C++ 析构函数与变量的生存周期实例详解
- 浅析php中常量,变量的作用域和生存周期
- static成员变量,non-static成员变量,局部变量,global 变量作用域和生存周期
- SQL全局变量 -- @@error 与 @@ROWCOUNT 生存周期及相关
- C++临时变量的生命周期(const 引用后延长临时变量周期)
- php中常量,变量的作用域和生存周期
- 变量的作用域和生存周期
- 变量的存储方式和生存周期
- C++_类_对象的生存周期
- struts2 action中成员变量的生存周期
- 浅析php中常量,变量的作用域和生存周期
- 2、C语言中变量的存储,生存周期,作用范围分类
- auto变量在for循环中的生存周期
- php中 常量,变量的作用域和生存周期
- 内存分配方式与变量的生存周期
- asp.net 中System.Web.UI.Page子类的成员变量的生存周期
- 浅析php中常量,变量的作用域和生存周期