Qt內存管理之parent指針

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

發佈了44 篇原創文章 · 獲贊 15 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章