• 4594阅读
  • 4回复

为什么我delete一个Widget,内存不会释放呢。 [复制链接]

上一主题 下一主题
离线txwhhny
 

只看楼主 倒序阅读 楼主  发表于: 2011-12-07
今天做了个试验,看new的内存是否有通过delete释放了。
首先用简单的数据类型。char * p = new char[1024 * 1024];可以看到内存增长了,然后delete [] p;内存也可以恢复到new之前的大小。
接着用自定义的class,在new后,内存增长了,然后delete,内存也减小到new之前的大小。
但是当我new的是QWidget的时候,内存增长了,delete之后,内存也不减小,而且当我多次new QWidget的时候,内存也不再增长。。求解释。
离线wxj120bw

只看该作者 1楼 发表于: 2011-12-07
回 楼主(txwhhny) 的帖子
你描述new QWidget时是不是描述不对
我尝试发现 当new QWidget时,内存并没有增长,当然delete 内存也不减少。应该是QWidget所消耗内存较少,以至于并不显示出来。
离线txwhhny

只看该作者 2楼 发表于: 2011-12-08
回 1楼(wxj120bw) 的帖子
我new是用designer生成的,是Widget的窗口,带有ui文件,.h,.cpp文件。然后添加了很多数据成员,构造函数里什么都没写哦。然后new之前和之后都看了下内存,的确是增长了的,delete之后没减少,但是我new多次,没有delete也没有增加。。。搞不明白
离线wxj120bw

只看该作者 3楼 发表于: 2011-12-08
回 2楼(txwhhny) 的帖子
这个嘛 就不清楚了 有时间再专研下
离线wuleeemail

只看该作者 4楼 发表于: 2011-12-17
“首先用简单的数据类型。char * p = new char[1024 * 1024];可以看到内存增长了,然后delete [] p;内存也可以恢复到new之前的大小。
接着用自定义的class,在new后,内存增长了,然后delete,内存也减小到new之前的大小。
”这是C++特点,没错。
“我new是用designer生成的,是Widget的窗口,带有ui文件,.h,.cpp文件。”如果我没有理解错的话你后来的Widget的窗口是拖出来的,那么这些小窗口在生成的时候都是以那个大的Widget作为父窗口的,这种情况下,就无所谓Delete了,在父窗口销毁的时候这些小窗口的内存会一并收回的。
快速回复
限100 字节
 
上一个 下一个