Qt中特有的类对象机制——内存自动释放

原创 2014年01月03日 17:11:51

这段时间一直在学Qt,也一直在做这方面的东西,觉得对Qt的机制已经很了解了,不就是信号与槽加上C++的机制吗,但是今天遇到的问题让我纠结了很时间。这个问题出现在析构函数的地方,以为是之前new的一个对象,多次删除造成的,但是检查一下,根本没有发现有这个方面的,问题。最后以关键词“QT”,“析构函数”搜索了一下发现了这边文章http://www.cnblogs.com/foxhengxing/archive/2010/12/24/1916355.html,大致读了一下,明白为什么会出现这样的错误。

现在觉得Qt还是有很多没有懂,不过吧,我觉得Qt这个双重机制能大大减小内存泄露的几率,哪双重机制呢,第一,当然是我们程序员自己控制的,new一个对象,生命周期结束之后一定要delete它,第二个是Qt自己的机制,就是父类对象销毁时会销毁它的所以子类对象。

通过这个错误我发现在Qt编程中,如果一个类不必要有父类的话,定义构造函数的时候不必须定义成NetWorkTestOne(QWidget *parent = 0, Qt::WFlags flags = 0);这种带顶层父类的方式,而是定义成NetWorkTestOne();。如果一个使用一个类,是在其他类中,那么最好是定义成这样的方式,这样可以保证在父类销毁的时候把子类也销毁掉,这样可以降低内存泄露的几率。它跟java很相似,java是有自己的内存回收机制,就相当于Qt的顶层父类,来控制对象的生命周期。

总结一下:

Qt内存自动释放的条件是

1. 必须是QObject的派生类。

2. 必须指定了parent对象。

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于QT的内存申请和释放

关于QT的内存申请和释放 进入QT gui 设计的学习也有大半年年了,在做关于QT项目时遇到过关于内存释放错误的问题,曾经一度纠结过!以下是个人关于qt内存管理机制的总结:   首先看一个类:...

Qt浅谈之一:内存泄露(总结)

Qt内存管理机制:Qt 在内部能够维护对象的层次结构。对于可视元素,这种层次结构就是子组件与父组件的关系;对于非可视元素,则是一个对象与另一个对象的从属关系。在 Qt 中,在 Qt 中,删除父对象会将...

Qt的内存释放策略(内存自动释放机制)

原文地址:http://www.cnblogs.com/foxhengxing/archive/2010/12/24/1916355.html 很多C/C++初学者常犯的一个错误就是,使用mall...

qt内存释放

改前:     #include "qimagetoiplimage.h" QImage*  IplImage2QImage(IplImage *iplImg)         {      ...
  • zm_nong
  • zm_nong
  • 2012年05月06日 22:53
  • 3546

qt 对话框关闭以及自动释放内存

关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),exit()以及close()。 首先说明窗口退出时,系统提示对话框的代码编辑。对主程序的退出,可以调用成员函数exit(),同时也可以调用...

Qt中new出来的控件需要手动delete掉还是系统自动会析构掉?

Qt内存自动释放有两个前提条件:         1. 必须是QObject的派生类         2. 必须指定了parent对象 即:Qt 中 父亲被删除的时候会自动销毁他的孩子。 ...
  • DFLee
  • DFLee
  • 2013年10月22日 09:43
  • 2513

Qt: 释放窗口资源

http://www.cppblog.com/biao/archive/2009/07/02/89079.html 1. 对于使用指针,使用new创建的窗口,当然可以使用delete显示的释放其...

QT中对象释放顺序的一个示例

      今天编写了一个简单的QT 应用程序。源代码如下:#include #include #include int main(int argc,char* argv[]) { ...

Qt 内存回收机制

关于 Qt 内存回收机制的,刚接触 Qt 不久,第一次看到这方面的问题。有点乱,等下次看到更全面和更官方的内容时再补充。          在 C++ Primer 中读到 new 是在堆里面申请一段...
  • dscyw
  • dscyw
  • 2013年11月03日 20:45
  • 1988

Qt动态分配内存的内存回收规则

在Qt的程序中经常会看到只有new而不delete的情况,其实是因为Qt有一套回收内存的机制,主要的规则如下: 1.所有继承自QObject类的类,如果在new的时候指定了父亲,那么它的清理时在父亲...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt中特有的类对象机制——内存自动释放
举报原因:
原因补充:

(最多只允许输入30个字)