【QT】表格控件+qt中没delete是否会内存泄漏
来源:互联网 发布:windows isa 编辑:程序博客网 时间:2024/06/05 18:27
功能截图:
表格控件的每一个单元格代表一个item,相互独立。
加入数据如下:
代码实现:
1、设置列数
ui->tableWidget->setColumnCount(2);
2、设置标题
QStringList hheader; hheader.append("name"); hheader.append("score"); ui->tableWidget->setHorizontalHeaderLabels(hheader);
3、插入数据
AddData("zzn","7");
4、AddData函数:
void MainWindow::AddData(const QString & name,const QString & score){ //行总数 int row=ui->tableWidget->rowCount(); //末尾插入新一行 ui->tableWidget->insertRow(row); //显示分数 QTableWidgetItem *item=new QTableWidgetItem();//等号前面的声明,就代表item已经被分配空间,等待存地址了 item->setText(score); ui->tableWidget->setItem(row,1,item); //这里有个未解决疑问,晚上请教大神。在调试总结有写。 //如果这里不delete掉item是不是会内存泄漏??? //下面item直接接管另一个新开辟的存储空间 //但是系统却认为指向上一个new空间的手没被砍断,然而实际上item已经不管他转身投入新人怀抱了 //显示名字 item=new QTableWidgetItem(); item->setText(name); ui->tableWidget->setItem(row,0,item);}
调试总结:
1、setText是可以重复设置的,以最后一次设置为准。
2、关于new对象和内存泄漏问题:
我对new和delete的理解:
(1)item代表开辟了的一个内存空间,存放了地址,是存储着类QTableWidgetItem的某个对象的空间的地址;等号后面的new才表示真正开辟了一个存放QTableWidgetItem类对象的空间,通过item指针操作QTableWidgetItem对象的setText之类的成员啥的。item是一只很长很长的手,精确抓取操作QTableWidgetItem对象。
(2)delete是告诉内存,现在item不接管类QTableWidgetItem的某个对象的存储空间了,他们之间的联系“那只长长的手”被砍断了。但是此时,item的值仍然是原QTableWidgetItem对象的地址,只不过给原QTableWidgetItem某对象开辟的那块内存空间以后可以干别的用了,比如存个int啊啥的。
(3)如果item指针没被delete,而直接附新值,让他指向别的存储空间,那么原QTableWidgetItem对象就没指针接管了,此时内存已经找不到他了,他的地址已经丢了(在item被附新值之前,没有保留复制出来原来QTableWidgetItem对象的地址),变成了野指针?
代码的疑问:
在使用完item设置score后,想delete item,但最终显示的tablewidget里的score也没了。。
原示例代码里是没有delete操作的,难道不会内存泄露吗?
————————————————2017-6-14 18:47——————————————
大神果然是大神!
大神的说法是:一般没有特殊机制的情况下这样的使用(指向new对象的指针重新赋值却没有delete掉原指针)确实会内存泄漏。但在QT中,new出来的新控件(如上述情况中的QTableWidgetItem对象)的指针已经发送给他的父窗口管理,当父窗口注销时,子窗口也会被同时delete掉,不会发生内存泄漏。
- 【QT】表格控件+qt中没delete是否会内存泄漏
- 类继承中,通过基类指针delete释放,是否会造成内存泄漏
- 类继承中,通过基类指针delete释放,是否会造成内存泄漏
- Qt内存泄漏问题
- Qt内存泄漏问题
- Qt内存泄漏问题
- Qt内存泄漏问题
- Qt :内存泄漏
- Qt内存泄漏问题
- QT:内存泄漏
- Qt 内存泄漏测试
- QT内存泄漏
- 浅谈Qt内存泄漏
- [C/C++][经典探讨]类继承中,通过基类指针delete释放,是否会造成内存泄漏
- [C/C++][经典探讨]类继承中,通过基类指针delete释放,是否会造成内存泄漏
- [C/C++][经典探讨]类继承中,通过基类指针delete释放,是否会造成内存泄漏
- [C/C++][经典探讨]类继承中,通过基类指针delete释放,是否会造成内存泄漏
- Qt在表格中加入控件
- quick-cocos2d-x中的ListView详解
- JUnit4写测试用例异常: java.lang.Exception: No tests found matching处理办法
- java compareto 小结
- 3.3 Linux获取系统信息(3、4节)
- C语言stdio.h和stdlib.h
- 【QT】表格控件+qt中没delete是否会内存泄漏
- JavaScript窗体Window.ShowModalDialog使用详解
- Android问题集3
- Java System参数获取
- Redis 事务(张高伟)
- 汉字与 Unicode 转换 //转换 function Str_Gb2UniCode(text: string): String; var i,len: Integer; cur: Integer;
- mysql集群 之 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
- linux下java环境的搭建
- Jquery单引号和双引号的使用注意