QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)

摘要:
");s-˃sex=QString("男?

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=0;i<100000;i++)    {        Por_test s;        s.id = 1;        s.name = QString("hello World!");        s.sex = QString("男");        slist.append(s);    }    slist.clear();    return a.exec();}

将上面代码中的slist.clear(); 注释掉,内存显示为如下(任务管理器里的截图)

111

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

22222

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=0;i<100000;i++)    {        Por_test *s = new Por_test();        s->id = 1;        s->name = QString("hello World!");        s->sex = QString("男?");        slist.append(s);    }//    qDeleteAll(slist);    slist.clear();    return a.exec();}

上面代码运行后的内存情况如下图

3333

说明当T的类型为指针时,调用clear()方法并不能释放其内存

此时void qDeleteAll ( const Container &c)方法将派上用场了,将上面代码中的注释去掉以后,

再次运行程序,此时的内存情况如下图

4444

通过对比靓图,可以看出,内存已经释放,我们再来看下qt助手中qDeleteAll 方法的说明

void qDeleteAll ( ForwardIteratorbegin, ForwardIteratorend)

Deletes all the items in the range [begin,end) using the C++deleteoperator. 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 callsdeleteon 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 asQMapandQHash. Only the objects stored in each container will be deleted by this function; objects used as keys will not be deleted.

See alsoforward 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 方法。

http://www.cnblogs.com/bingcaihuang/archive/2010/12/31/1923236.html

免责声明:文章转载自《QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python 装饰器的理解Win7:修改注册表来更改“桌面”、“我的文档”、“收藏夹”的位置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

更新Linux下openssl路径和库路径

更新Linux下openssl路径和库路径 参考ubuntu 中更新openssl库 新版openssl路径为老师博客中默认的路径/root/rocopenssl mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak ln -s...

DataFrame数据合并

一、join 作用:默认情况下,他是把行索引相同的数据合并到一起注意:以左为准,没有的部分用NaN补全 例子 import pandas as pd import numpy as np df1 = pd.DataFrame(data=np.zeros((2, 5)), index=list('AB'), columns=list('VWXYZ')) #...

Linux环境下实现对文件读写操作

Linux环境下实现对文件读写操作 ---- 今天分享一下在linux系统在实现对文件读写一些基本的操作,在这之前我们要掌握一些基本的技能在Linux环境下。比如查看命令和一个函数的具体用法,就是相当于查手册,在Linux下有一个man手册非常有用:man查询手册man 1 +命令 这里的1表示为查询的是Linux命令man 2 xxx 这里的2表示为查...

uniapp多选按钮

闲言少叙,直接上效果图,看图才知道是不是自己想要的效果 HTML代码 <view class="page index"> <!--多选,不改变选择中后的值 --> <view class="list-box"> <view v-for="(item,inde...

zabbix添加邮件方式报警并实现分组报警的功能

zabbix添加邮件方式报警并实现分组报警的功能 1.编写发送邮件的python脚本# vim /usr/local/zabbix-3.2.0/share/zabbix/alertscripts]# cat send_mail.py #!/usr/bin/python #coding:utf-8 import smtplib from email.m...

Visual Studio 2013新建工程导入现有代码文件夹并且保持目录结构

本文提供了一个在Windows环境下使用Visual Studio 2013编辑现有源代码并且保持目录结构的方法。本文使用VS2013中文社区版做示例(本版本为免费版,可在VS官网下载),其他版本的VS操作方式类似。打开VS2013,选择【菜单】-【新建】-【从现有代码创建项目】 选择项目类型:Visual C++ 项目文件位置:创建完成后会在这个目录生成...