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出來的如果沒有指定父指針,系統就不負責回收;即使指定了父指針,也要等到父類釋放時才能一起釋放,有時就等不到那時候,程序就掛啦。