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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章