您的位置:首页 > 编程语言 > Qt开发

Qt中的垃圾收集机制

2015-10-31 11:56 405 查看
在Qt中我们有很多的new,可是却很少看见delete,这是因为也有自己的垃圾收集机制,当然不同于java的引用计数,Qt是以对象树的形式来实现对垃圾的收集。父类拥有并维护者一颗对象树。你在学一个类的构造函数时,格式是这样:xxx(QWidget *parent = 0),这里的parent就是父类的指针,即是把此类对象注册到父类的对象树中,当父类的对象释放时,对象树的对象也会释放,这样就不需要你的显示释放,而且如果你在这种情况下还进行显示的释放,就会造成未定义的结果。

虽然此种方法可以简化内存使用的过程,可是在此过程中,举个类子,比如有一个窗口用于接收一些输入的数据,在输入好了之后就关闭了,在使用是在打开,可是这样在对象树中就存在了多个同类对象,而且这些对象只有在父类释放时才会释放,就是在很长一段时间类霸占资源。

在我看来,我使用了两种方法,一种是局部的static变量,在全局生成一份对象,在调用开始到程序结束贯穿这个过程。可是还是会霸占资源,你不可能总是使用这个变量。可以认为这是一种静态的解决方法。

还有就是我所谓的动态方法。在new时不指定父类,这就需用我们delete,在哪里delete是个问题。到面前为止,我涉及的只是QWidget。只要我们重写

closeEvent,调用deletelater函数就行。

from:http://blog.csdn.net/zhx6044/article/details/7800704
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: