首页| 论坛| 消息

标题:关于new的问题一直没弄明白
作者:cao_zhong_yu
日期:2010-03-09 17:05
内容:

c++程序的内存格局通常分四个区,全局数据区,代码区,栈区,堆区
全局变量,静态数据,常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数,返回数据、返回地址等存放在栈区,余下的空间都被作为堆区
c语言的malloc和free , c++的new和delete都从堆中分配和释放内存块,如果不释放就容易造成内存泄漏
在c++中为什么不用malloct和free的原因之一是它们分配空间时不调用构造和析构函数,即使用malloc分配也是一个需要重新初使化的类。
如果分配局部对象,则在该局部对像退出作用域时自动调用析构函数。但堆对象的作用域是整个程序生命期,所以要用delete来调用析构函数
现在的问题是定义全局变量QProcess *pro = new QProcess(this);
然后在程序中我不断的对pro进行new,那新new分配的空间和旧new分配空间地址肯定是不一样的,旧new分配的空间会被释放吗
还有就是在函数中定义局部的pro,但函数的生命周期很快结束,但pro->start()里运行的程
序没有中止,当程序运行完后怎么把内存释放掉
pro->start(program)里运行的程序需要的空间是怎么分配的,全在堆里吗


#1 [cao_zhong_yu 03-11 11:28]
全局变量不断的new,原来的如果不delete掉的话,是占内存的
如果是QPixmap *p = new QPixmap("*.png"); QPixmap *q= p;
这个q是不占堆的,它与p是指向同一块内存区,如果delete其中一个 ,那么另一个也没了,这个就是浅拷贝

回复 发表
主题 版块