找回密码
 立即注册
收起左侧

Qt的delete去哪了

7
回复
7839
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2014-4-26 18:28:25 显示全部楼层 |阅读模式
1Qter豆
刚接触Qt不久,看《C++ GUI Qt编程(第二版)》时有时候会遇到这样的问题,在Qt一直在new,但是很少delete,这不是很有内存泄漏的风险吗?我查了查,Qt有半自动的内存管理方式,会在父对象析构时delete,但还是有些模糊。求大家看看一段代码(书上P62):
void Spreadsheet::clear(){    setRowCount(0);    setColumnCount(0);    setRowCount(RowCount);    setColumnCount(ColumnCount);
    for (int i = 0; i < ColumnCount; ++i) {        QTableWidgetItem *item = new QTableWidgetItem;//new了对象        item->setText(QString(QChar('A' + i)));        setHorizontalHeaderItem(i, item);//指针传给了这个函数,不知在哪里delete    }
    setCurrentCell(0, 0);}
如代码注释的,我不知道在哪里delete这些QTableWidgetItem类型的指针。
求大神们详解。谢谢

最佳答案

查看完整内容

一般会自动销毁的,不过不放心的话可以自己加上。参加http://www.360doc.com/content/12/1017/14/168576_242012173.shtml
回复

使用道具 举报

累计签到:46 天
连续签到:1 天
2014-4-26 18:28:26 显示全部楼层
一般会自动销毁的,不过不放心的话可以自己加上。参加http://www.360doc.com/content/12/1017/14/168576_242012173.shtml
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-4-26 18:33:39 显示全部楼层
察,格式变得这么恶心,希望这个不会变坏
voidSpreadsheet::clear()
{    setRowCount(0);
   setColumnCount(0);
   setRowCount(RowCount);
   setColumnCount(ColumnCount);
   for (int i = 0; i < ColumnCount; ++i) {
       QTableWidgetItem *item = new QTableWidgetItem;
                                                 //new了对象
       item->setText(QString(QChar('A' + i)));
       setHorizontalHeaderItem(i, item);//指针传给了这个函数,
                        //不知在哪里delete
   }
   setCurrentCell(0, 0);
}
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-4-27 18:06:36 显示全部楼层
aqfairy 发表于 2014-4-26 21:36
一般会自动销毁的,不过不放心的话可以自己加上。参加http://www.360doc.com/content/12/1017/14/168576_24 ...

谢谢,不过我就是想问
  1. QTableWidgetItem *item = new QTableWidgetItem;
复制代码
这些指针,在哪个父类,或是动用了什么机制,销毁了这26个QTableWidgetItem指针的详细过程,这有助于我了解,不然是寝食难安啊,谢谢。
回复

使用道具 举报

尚未签到

2014-4-27 18:37:44 显示全部楼层
human 发表于 2014-4-27 18:06
谢谢,不过我就是想问这些指针,在哪个父类,或是动用了什么机制,销毁了这26个QTableWidgetItem指针的详 ...

QObject 有个参数是父对象指针,一旦QObject发现父对象销毁了,自己也会跟着销毁
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-5-3 12:10:47 显示全部楼层
Joey_Chan 发表于 2014-4-27 18:37
QObject 有个参数是父对象指针,一旦QObject发现父对象销毁了,自己也会跟着销毁 ...

这26个QTableWidgetItem的父对象是谁呀,声明的时候没有传入父对象的指针,这个我不是很了解
回复

使用道具 举报

尚未签到

2014-5-3 20:55:39 显示全部楼层
human 发表于 2014-5-3 12:10
这26个QTableWidgetItem的父对象是谁呀,声明的时候没有传入父对象的指针,这个我不是很了解 ...

没有就是没有父对象咯。。。创建的对象销毁了那么你这些对象也还在内存的
回复

使用道具 举报

尚未签到

2014-5-4 13:30:53 显示全部楼层
QTableWidgetItem怎么可能没有父对象,你创建它有什么用?不用QTableWidget吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了