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出来的如果没有指定父指针,系统就不负责回收;即使指定了父指针,也要等到父类释放时才能一起释放,有时就等不到那时候,程序就挂啦。