• 8754阅读
  • 5回复

问一个关于设置model的item,需不需要delete的问题[已经解决,内含注意事项] [复制链接]

上一主题 下一主题
离线xtfllbl
 

只看楼主 正序阅读 楼主  发表于: 2010-03-30
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
最近困扰于内存泄漏方面的问题,特来请教。

大致是显示一张表格,用了tableview,然后将model中的数据显示出来,问题如下:

比如在一个.h文件中定义

  1.     QStandardItemModel *model;
  2.     QStandardItem *item;


然后在.cpp中
  1.     model = new QStandardItemModel(0, colNum, this);
  2.     for(int i=0;i<20000;i++)
  3.     {
  4.         aPid=QString::number(proc->pidVector.at(i),10);
  5.         itemPid=new QStandardItem(aPid);
  6.         model->setItem(countRow,countItem,itemPid);
  7.     }


我想问的是最后我delete model了,那么那20000个item是不是需要delete,还是delete model的同时就已经delete了?
[ 此帖被xtfllbl在2010-03-30 16:59重新编辑 ]
上海欢迎您
离线xtfllbl

只看该作者 5楼 发表于: 2010-03-30
成功认识到了自己的错误

错误原因:
比如你new 了2000个item
但是只set了1000个item
当你delete model的时候,也只destory了1000个item

剩下的么就泄漏了。。。

成功把程序从泄露0.45mb降低到0.2mb,继续努力。。。
上海欢迎您
离线xtfllbl

只看该作者 4楼 发表于: 2010-03-30
引用第3楼sbtree于2010-03-30 16:33发表的  :
QStandardItemModel::~QStandardItemModel ()
Destructs the model. The model destroys all its items.
文档里的意思是在Model被析构的时候,它所有的item也将被删除。相信文档就不用担心,不相信文档就要自己仔细看看Qt的源码了

丢人了,原来文档里写了。
上海欢迎您
离线sbtree
只看该作者 3楼 发表于: 2010-03-30
QStandardItemModel::~QStandardItemModel ()

Destructs the model. The model destroys all its items.
文档里的意思是在Model被析构的时候,它所有的item也将被删除。相信文档就不用担心,不相信文档就要自己仔细看看Qt的源码了
windows 7 + VC++2008 + Qt4.5.2
离线xtfllbl

只看该作者 2楼 发表于: 2010-03-30
引用第1楼yangfanxing于2010-03-30 16:06发表的  :
容器是没了,指针还在!
就像new了一个东西没show()出来,但还是在的;set的话只是引用吧~~~

哎,我也是这么想的,现在在想怎么把那些item delete掉,头疼阿
上海欢迎您
离线yangfanxing
只看该作者 1楼 发表于: 2010-03-30
容器是没了,指针还在!
就像new了一个东西没show()出来,但还是在的;set的话只是引用吧~~~
PHPWind好恶心。。。不想看这种界面。。。
快速回复
限100 字节
 
上一个 下一个