Qt中的垃圾收集机制

来源:互联网 发布:360 for mac官方下载 编辑:程序博客网 时间:2024/06/06 05:53

                        在Qt中我们有很多的new,可是却很少看见delete,这是因为也有自己的垃圾收集机制,当然不同于java的引用计数,Qt是以对象树的形式来实现对垃圾的收集。父类拥有并维护者一颗对象树。你在学一个类的构造函数时,格式是这样:xxx(QWidget *parent = 0),这里的parent就是父类的指针,即是把此类对象注册到父类的对象树中,当父类的对象释放时,对象树的对象也会释放,这样就不需要你的显示释放,而且如果你在这种情况下还进行显示的释放,就会造成未定义的结果。
                         虽然此种方法可以简化内存使用的过程,可是在此过程中,举个类子,比如有一个窗口用于接收一些输入的数据,在输入好了之后就关闭了,在使用是在打开,可是这样在对象树中就存在了多个同类对象,而且这些对象只有在父类释放时才会释放,就是在很长一段时间类霸占资源。
                          在我看来,我使用了两种方法,一种是局部的static变量,在全局生成一份对象,在调用开始到程序结束贯穿这个过程。可是还是会霸占资源,你不可能总是使用这个变量。可以认为这是一种静态的解决方法。
                         还有就是我所谓的动态方法。在new时不指定父类,这就需用我们delete,在哪里delete是个问题。到面前为止,我涉及的只是QWidget。只要我们重写
closeEvent,调用deletelater函数就行。