Qt中特有的类对象机制——内存自动释放
2014-01-03 17:11
225 查看
这段时间一直在学Qt,也一直在做这方面的东西,觉得对Qt的机制已经很了解了,不就是信号与槽加上C++的机制吗,但是今天遇到的问题让我纠结了很时间。这个问题出现在析构函数的地方,以为是之前new的一个对象,多次删除造成的,但是检查一下,根本没有发现有这个方面的,问题。最后以关键词“QT”,“析构函数”搜索了一下发现了这边文章/article/6436095.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这个双重机制能大大减小内存泄露的几率,哪双重机制呢,第一,当然是我们程序员自己控制的,new一个对象,生命周期结束之后一定要delete它,第二个是Qt自己的机制,就是父类对象销毁时会销毁它的所以子类对象。
通过这个错误我发现在Qt编程中,如果一个类不必要有父类的话,定义构造函数的时候不必须定义成NetWorkTestOne(QWidget *parent = 0, Qt::WFlags flags = 0);这种带顶层父类的方式,而是定义成NetWorkTestOne();。如果一个使用一个类,是在其他类中,那么最好是定义成这样的方式,这样可以保证在父类销毁的时候把子类也销毁掉,这样可以降低内存泄露的几率。它跟java很相似,java是有自己的内存回收机制,就相当于Qt的顶层父类,来控制对象的生命周期。
总结一下:
Qt内存自动释放的条件是
1. 必须是QObject的派生类。
2. 必须指定了parent对象。
相关文章推荐
- Java自动内存管理机制(三) 对象、引用
- Cocos2d-x内存自动释放机制--透彻篇
- Objective-C:ARC自动释放对象内存
- Qt的内存释放策略(内存自动释放机制)
- C++中单例对象的内存自动释放
- oc-内存管理之自动释放--我自动释放了我使用的所有对象,但程序占用内存还是偏高,为什么?
- cocos2d-x内存自动释放机制
- Qt的内存释放策略(内存自动释放机制)
- 关于Class对象、类加载机制、虚拟机运行时的内存布局的全面解析和推测
- 内存动态分配和垃圾自动回收机制(一)
- 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现
- iOS中,对象释放机制以及__weak、__unsafe_unretained的一些问题
- 关于vp中的内存自动回收机制的看法
- python语法31[with来自动释放对象]
- 销毁COM对象引用时内存异常。(未释放资源导致)
- C语言:动态内存会被自动释放吗?杜绝“野指针”
- 自动释放池 ARC机制
- Java虚拟机(2)自动内存管理机制
- C语言:动态内存会被自动释放吗?杜绝“野指针”