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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

piaopiaolanghua

感谢鼓励,再接再厉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值