• 4227阅读
  • 1回复

关于new的问题一直没弄明白 [复制链接]

上一主题 下一主题
离线cao_zhong_yu
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-09
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)里运行的程序需要的空间是怎么分配的,全在堆里吗

离线cao_zhong_yu
只看该作者 1楼 发表于: 2010-03-11
全局变量不断的new,原来的如果不delete掉的话,是占内存的
如果是QPixmap *p = new QPixmap("*.png"); QPixmap *q  = p;
这个q是不占堆的,它与p是指向同一块内存区,如果delete其中一个 ,那么另一个也没了,这个就是浅拷贝
快速回复
限100 字节
 
上一个 下一个