• 10871阅读
  • 9回复

请问什么情况下自己new了一个组件,而不需要自己delete?? [复制链接]

上一主题 下一主题
离线markli
 
只看楼主 正序阅读 楼主  发表于: 2006-03-21
Qt中很多自带得例子都有,new了一个组件,而没有delete,请问有什么原则吗?什么情况下要自己delete,什么情况下不需要?谢谢
[ 此贴被XChinux在2006-03-21 08:23重新编辑 ]
离线cocalele
只看该作者 9楼 发表于: 2006-04-04
把Button添加到其他窗口中时这个Button的父对象就被改成这个窗口了。窗口析构时Button也就析构了
离线waitforgod

只看该作者 8楼 发表于: 2006-04-04
楼上的意思是说,例如:“QPushButton *quit = new QPushButton(tr("&Quit"));”的new语句,因为没有将parent的指针传入,所以将有内存泄漏?
但这个例子是qt4 tutorial中的例子,难道tutorial有错??
离线weilink
只看该作者 7楼 发表于: 2006-04-03
所有继承自QObject的类,如果构造的时候指定了parent(同样继承自QObject),当parent析构的时候,所有以其为parent的child都会自动析构,不需要显式delete。如果不指定parent,不能自动析构,必须显示调用delete,否则会有内存泄漏
离线waitforgod

只看该作者 6楼 发表于: 2006-03-31
请问如果在new一个组件是并没有把parent的指针给他,当parent结束时,能不能析构这个组件???
例如:QPushButton *quit = new QPushButton(tr("&Quit")); 并没有把this指针给quit。
离线XChinux

只看该作者 5楼 发表于: 2006-03-21
引用第2楼zccmin2006-03-21 11:36发表的“”:
照一楼所说:如果我在A的构造函数中A(){b=new B(this)}不需要在A的析构函数中delete b?
我觉得这种情况还是需要在~A(){delete b;}


这种情况的前提是:这种框架类它有这种机制。
这其实没什么好讨论的。本质上还得看代码怎样写的。这与Java, C#不一样,它们是语言和环境紧密不可分的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 4楼 发表于: 2006-03-21
用不用delete,还要看其parent到底是在其析构中是怎么做的。
还得看其原理。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线icevi

只看该作者 3楼 发表于: 2006-03-21
我比较同意版主的观点.
====================
www.bilive.com
BiForm BiReader BiChat
最爱QT和PYTHON
====================
离线zccmin
只看该作者 2楼 发表于: 2006-03-21
照一楼所说:如果我在A的构造函数中A(){b=new B(this)}不需要在A的析构函数中delete b?
我觉得这种情况还是需要在~A(){delete b;}
离线XChinux

只看该作者 1楼 发表于: 2006-03-21
new的时候指明了parent,那么parent析构时会自动把其下的部件 也析构了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个