循环创建对象,内存释放问题.doc
上传人:sy****28 上传时间:2024-09-15 格式:DOC 页数:2 大小:53KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

循环创建对象,内存释放问题.doc

循环创建对象,内存释放问题.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1、编译器会对for循环优化,即for循环内的局部变量内存只分配一次,在for循环结束时回收内存。变量的生命周期是在离开作用域时,生命就走到了尽头,但是变量所占的内存可能在变量的生命消失的时候还没有被回收。voidDoSomething(){for(inti=0;i<5;i++){inta=7;printf("a=%x\n",&a);}}结果是a的地址相同a=bf98146ca=bf98146ca=bf98146ca=bf98146ca=bf98146c说明在for循环中局部变量在for循环时分配内存,进入花括号时生命周期开始,在出花括号时生命周期结束,但是内存没有被回收,继续下一次循环时由于a的生命周期在上一次循环结束时结束,因而再一次定义a不会出现重复定义(作用域的关系),但此时不会为a分配内存,用上一次未被释放的内存。当i=6时循环结束,回收内存。2、函数中,变量的作用域与内存存在时间一样。没有for循环的编译器优化voidfun(){{inta=10;//bf914bfc}//出作用域时内存被回收,因而2次的地址不同inta=10;//bf914bf8}在循环中的局部变量内存只会在当前函数stack上分配一次,。在每一次循环开始时,变量的构造函数首先被调用,在当前一轮循环结束时,变量的析构函数将被调用,而变量内存将被重复使用。该变量内存将在当前函数退出时随stack清空而真正被回收注销#include<iostream>usingnamespacestd;classA{public:A(){cout<<"inctorofA"<<endl;}A(A&){cout<<"incopyctorofA"<<endl;}~A(){cout<<"indtorofA"<<endl;}};intmain(intargc,char*argv[]){Ax;cout<<"beforeloop"<<endl<<endl;for(inti=0;i<3;i++){Aa=x;}cout<<endl<<"afterloop"<<endl;return1;}inctorofAbeforeloopincopyctorofAindtorofAincopyctorofAindtorofAincopyctorofAindtorofAafterloopindtorofA