Qt内存管理之parent指针

来源:互联网 发布:新手开淘宝店装修 编辑:程序博客网 时间:2024/04/30 03:44
QFile ( const QString & name )QFile ( QObject * parent )QFile ( const QString & name, QObject * parent )

------------------------------------------------------

#include <QtCore>class Test : public QObject{public:void test(){const int size = 10000;QFile * files[size];for (int i = 0; i < size; i++){files[i] = new QFile(this);//带Or不带this指针差别很大。带上的话,Test销毁时负责销毁;否则就不管啦}}};int main(int argc, char *argv[]){QCoreApplication a(argc, argv);////在windows下,加上下面三句在关闭程序时,会输出内存泄露情况//int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );//tmpFlag |= _CRTDBG_LEAK_CHECK_DF;//_CrtSetDbgFlag( tmpFlag );Test *t = new Test();t->test();QTimer::singleShot(10000, t, SLOT(deleteLater()));//十秒钟之后执行类似"delete t"的操作return a.exec();}/* 执行效果:1、带this指针,程序启动后,占用内存约300多M,10秒后变成正常的10M多。2、不带this指针,内存泄露,程序一直占用300多M内存。*/



任务管理器查看程序内存占用情况


【后记】

        话说好记性不如烂笔头,所以以后还是多写一些随笔~

        在函数里面不需要使用new就不用new了,直接使用使用局部变量好啦;在QT中new出来的如果没有指定父指针,系统就不负责回收;即使指定了父指针,也要等到父类释放时才能一起释放,有时就等不到那时候,程序就挂啦。