• 10175阅读
  • 3回复

关于Qt4widget内存分配和setObjectName作用的问题 [复制链接]

上一主题 下一主题
离线astario
 
只看楼主 倒序阅读 楼主  发表于: 2006-08-09
2个比较菜的问题:
1.由propdialog.ui文件生成的头文件ui_propdialog.h中,可以找到为各个widget分配内存的代码,在函数setupUi中,例如layoutWidget = new QWidget(Dialog);

但是,找不到释放内存的代码,即没有delete,而这个properties dialog需要多次调用,会不会引起内存泄漏呢?是qt内部有自动释放的机制还是必须自己写代码delete掉?

2.layoutWidget->setObjectName(QString::fromUtf8("layoutWidget"));这一些语句去掉的话有什么不好的影响?我不需要根据ObjectName查找子控件。

多谢!
离线ediwon
只看该作者 1楼 发表于: 2006-08-10
1, 如果指明parent后.当parent delete时,子部件会自动delete

2,应该没有影响吧.
BLOG:
http://www.ediwon.com
-------------------------------
离线astario
只看该作者 2楼 发表于: 2006-08-10
多谢释疑,但是关于第一点,我不是很理解内部的机制,这与以前编程的习惯不合。
如果说系统在parent析构的时候自动释放子控件,那么用户在析构函数中再使用delete不就会出现错误吗?实际上我这样做不会报错。
我做了一个实验,在某个对话框中new了一大堆控件而没有delete,然后多次调用该对话框,运行时用KSysGuard监视占用虚存大小,似乎没有什么变化。难道系统释放子控件的时候还检查一下是否已经释放过了?

请牛人解释一下,谢谢!
离线ediwon
只看该作者 3楼 发表于: 2006-08-10
如果说系统在parent析构的时候自动释放子控件,那么用户在析构函数中再使用delete不就会出现错误吗?实际上我这样做不会报错。

//在parent未被delete时, 你可以delete子部件, 也可以不delete子部件。
但到最后parent 被delete 之前, 会检查parent的 reconstructor中有无delete子部件sentence,
若有,则执行delete子部件。若无, 编译系统也会自动给你加上delete子部件的sentence再执行。


给个例子你:
你写个class,可以写reconstructor function.也可以不写。 不写编译系统会自动给你加上。
BLOG:
http://www.ediwon.com
-------------------------------
快速回复
限100 字节
 
上一个 下一个