[转]QList内存释放
QList<T> 的释放分两种情况:
1.T的类型为非指针,这时候直接调用clear()方法就可以释放了,看如下测试代码
#include <QtCore/QCoreApplication>
#include <QList>
#include <QString>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); typedef struct _test
{
int id;
QString name;
QString sex;
}Por_test; QList<Por_test> slist;
for (int i=;i<;i++)
{
Por_test s;
s.id = ;
s.name = QString("hello World!");
s.sex = QString("男");
slist.append(s);
}
slist.clear();
return a.exec();
}
将上面代码中的slist.clear(); 注释掉,内存显示为如下(任务管理器里的截图)

如不去掉的话,内存显示如下图

2.T的类型为指针的情况,这时候直接调用clear()方法将不能释放,先看代码
#include <QtCore/QCoreApplication>
#include <QList>
#include <QString>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); typedef struct _test
{
int id;
QString name;
QString sex;
}Por_test; QList<Por_test *> slist;
for (int i=;i<;i++)
{
Por_test *s = new Por_test();
s->id = ;
s->name = QString("hello World!");
s->sex = QString("男?");
slist.append(s);
}
// qDeleteAll(slist);
slist.clear();
return a.exec();
}
上面代码运行后的内存情况如下图

说明当T的类型为指针时,调用clear()方法并不能释放其内存
此时void qDeleteAll ( const Container & c )方法将派上用场了,将上面代码中的注释去掉以后,
再次运行程序,此时的内存情况如下图

通过对比靓图,可以看出,内存已经释放,我们再来看下qt助手中qDeleteAll 方法的说明
void qDeleteAll ( ForwardIterator begin, ForwardIterator end )
Deletes all the items in the range [begin, end) using the C++ delete operator. The item type must be a pointer type (for example, QWidget *).
Example:
QList<Employee *> list;
list.append(new Employee("Blackpool", "Stephen"));
list.append(new Employee("Twist", "Oliver")); qDeleteAll(list.begin(), list.end());
list.clear();
Notice that qDeleteAll() doesn't remove the items from the container; it merely calls delete on them. In the example above, we call clear() on the container to remove the items.
This function can also be used to delete items stored in associative containers, such as QMap and QHash. Only the objects stored in each container will be deleted by this function; objects used as keys will not be deleted.
See also forward iterators.
void qDeleteAll ( const Container & c )
This is an overloaded member function, provided for convenience.
This is the same as qDeleteAll(c.begin(), c.end()).
上面qDeleteAll 方法的说明,已经很清楚了,如果T为指针类型时,释放内存须在clear方法前加上qDeleteAll 方法。
[转]QList内存释放的更多相关文章
- QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)
		QList<T> 的释放分两种情况: 1.T的类型为非指针,这时候直接调用clear()方法就可以释放了,看如下测试代码 #include <QtCore/QCoreApplicat ... 
- 关于vector的内存释放问题
		以前一直想当然的以为vector 的clear()函数会保证释放vector的内存,今天网上一查资料发现完全不是我想象的那样子. 比如有如下代码: tempObject obj1; tempObjec ... 
- STL 内存释放
		C++ STL 中的map,vector等内存释放问题是一个很令开发者头痛的问题,关于 stl内部的内存是自己内部实现的allocator,关于其内部的内存管理本文不做介绍,只是 介绍一下STL内存释 ... 
- java 笔记(1)-——  JVM基础,内存数据,内存释放,垃圾回收,即时编译技术JIT,高精度类型
		1.java中5个存放数据的地方: (1).寄存器(Registers):位于CPU内部,是速度最快的存储区,但是数量和容量有限.在java中不能直接操作寄存器. (2).栈(Stack):栈位于通用 ... 
- zw版【转发·台湾nvp系列Delphi例程】.NET调用HALCON COM控件内存释放模式
		zw版[转发·台湾nvp系列Delphi例程].NET调用HALCON COM控件内存释放模式 ------------------------------------方法一 :Imports Sys ... 
- WebBrowser的内存释放
		WebBrowser窗口自动滚动: this.webBrowser.Document.Window.ScrollTo(0, webBrowser1.Document.Body.ScrollRectan ... 
- [super dealloc]内存释放的先后顺序
		心得:从前做内存释放,只是觉得应该,没体会到这个的重要性,如果不及时释放就会有很多内存泄露,就像我早期遇到的前赴后继的崩溃,比如:没使用完,就释放会崩溃等明显的release问题. 作为全局的 ... 
- MKMapView的内存释放问题
		MKMapView的内存释放问题 by 伍雪颖 - (void)dealloc { self.mapView.showsUserLocation = NO; self.mapView.userTrac ... 
- Unity3D内存释放
		Unity3D内存释放 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resourc ... 
随机推荐
- python mysql开发日志
			开始做python 的数据库访问了,暂时选定了mysql数据库.原本想使用ORM,后来考虑到项目的情况是:表结构不复杂,但是数据库非常大.还是自己来操作sql,不过PYTHON的那些数据库ORM的代码 ... 
- 【刷题】BZOJ 4998 星球联盟
			Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太 ... 
- BZOJ3836  [Poi2014]Tourism  【树形dp +状压dp】
			题目链接 BZOJ3836 题解 显然这是个\(NP\)完全问题,此题的解决全仗任意两点间不存在节点数超过10的简单路径的性质 这意味着什么呢? \(dfs\)树深度不超过\(10\) \(10\)很 ... 
- BZOJ2159 Crash 的文明世界  【第二类斯特林数 + 树形dp】
			题目链接 BZOJ2159 题解 显然不能直接做点分之类的,观察式子中存在式子\(n^k\) 可以考虑到 \[n^k = \sum\limits_{i = 0} \begin{Bmatrix} k \ ... 
- ZABBIX 3.4 监控Nginx 状态(七)
			一.环境准备 1.在nginx的配置文件中,添加status配置 location /nginx_status { stub_status on; ... 
- 【bzoj4541】 Hnoi2016—矿区
			http://www.lydsy.com/JudgeOnline/problem.php?id=4541 (题目链接) 题意 给出一个平面图,若干询问,每次询问一个凸多边形内小多边形面积的平方和与面积 ... 
- 单点登录(九)-----遇到问题-----FileNotFoundException: class path resource-UsernamePasswordWrapperAuthenticatio
			运行cas server 项目时 报错 FileNotFoundException: class path resource-UsernamePasswordWrapperAuthenticatio ... 
- Web前端之Javascript详解20180330
			一.javascript概述 javascript是基于对象和事件的脚本语言. 特点: 1.安全性(不允许直接访问本地硬盘(因为是被远程的浏览器解释)),它可以做的就是信息的动态交互 2.跨平台性(只 ... 
- Python 个人的失误记录之str.replace
			1. replace 替换列表中元素的部分内容后返回列表 2018.06.08 错误操作 -- 这样并不能改变改变列表内的元素 data = [', '决不能回复---它'] data[2].repl ... 
- linux tmux命令小结
			http://note.youdao.com/noteshare?id=f1be507b4be27e53684b46a1424746b5 
