• 6810阅读
  • 1回复

WinCE+4.5.x 版本。 创建QWidget并Delete后,程序占用内存增加的问题 [复制链接]

上一主题 下一主题
离线zsnakecn
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-17
— 本帖被 XChinux 执行加亮操作(2010-10-21) —
目前在写一个WinCE的桌面程序。 用到了大量基于 QWidget的 自定义控件。由于界面效果比较复杂,需要支持n多窗体。每个窗体中又有n多控件
发现在创建一个窗体后返回,delete掉这个窗体,内存并没有减少。由于窗体较多,如果所有窗体都跑一遍,就会造成内存占用不断升高的问题。当需要进入一个N层的界面时,就会造成后面的窗体由于内存不够无法打开。
检查代码没有发现有内存没有释放的地方。 做了个测试程序,创建一个QWidget. 然后在此Widget中创建子Widget,然后释放。检查内存占用,没有释放。

不知道是Qt的内存泄露啊,还是Qt的内存管理原因造成这个问题。 如果是Qt的内存管理逻辑造成此问题,有什么方法能让其即时释放。
离线318065268
只看该作者 1楼 发表于: 2009-10-23
按Qt自己的说法,会递归删除其所有子部件。
但是我们在一个部件中往往也会创建一些不属于这个部件的部件,即那些没有父部件的部件,这样的部件就需要在该类的析构函数中显示的delete。
更深层的东西没有研究过。如果Qt真的做到了递归删除子部件,那么你的问题可能是:1、设置某部件为当前部件的子部件的语句有误;2、析构函数中没有删除那些没有父部件的部件或指针。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
快速回复
限100 字节
 
上一个 下一个