QList 的释放分两种情况:

1.T的类型为非指针,这时候直接调用clear()方法就可以释放了,看如下测试代码

#include #include #include

int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); typedef struct _test { int id; QString name; QString sex; }Por_test; QList 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(); 注释掉,内存显示为如下(任务管理器里的截图)

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

2.T的类型为指针的情况,这时候直接调用clear()方法将不能释放,先看代码

#include #include #include int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); typedef struct _test { int id; QString name; QString sex; }Por_test; QList 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();}

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

说明当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 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.

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

&lbrack;转&rsqb;QList内存释放

QList 的释放分两种情况: 1.T的类型为非指针,这时候直接调用clear()方法就可以释放了,看如下测试代码 #include

Android内存解析(二)— 详解内存,内部存储和外部存储

总述 觉得十分有必要搞清楚内存,内部存储和外部存储的区别,还有我们在开发中真正将数据存在了手机的哪儿. 先提一个问题:手机设置的应用管理中,每个App下都有清除数据和清除缓存,清除的分别是哪里的数据? ...

Unity3D内存释放

Unity3D内存释放 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resourc ...

Android 在内部存储读写文件

文件读写操作* Ram内存:运行内存,相当于电脑的内存* Rom内存:内部存储空间,相当于电脑的硬盘* sd卡:外部存储空间,相当于电脑的移动硬盘在内部存储空间中读写文件>小案例:用户输入账号密 ...

java 笔记(1)-—— JVM基础,内存数据,内存释放,垃圾回收,即时编译技术JIT,高精度类型

1.java中5个存放数据的地方: (1).寄存器(Registers):位于CPU内部,是速度最快的存储区,但是数量和容量有限.在java中不能直接操作寄存器. (2).栈(Stack):栈位于通用 ...

android中的文件操作详解以及内部存储和外部存储(转载)

原文链接:http://m.blog.csdn.net/article/details?id=17725989 摘要 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安 ...

关于php内存释放问题 内存溢出问题(二)

今天抽了一上午时间,来看了看之前解决过内存问题的代码,相对来说,我对自己代码的优化程序非常不满意,一次性导入四万条数据就使代码变得如此繁琐,我想这不是根本的解决方法.通过网上检索,对问题有进一步的分析 ...

【转】 android中的文件操作详解以及内部存储和外部存储

摘要 其实安卓文件的操作和Java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者 ...

STL vector 内存释放

最近在论坛看到一个提问帖子,问题是vector中存储了对象的指针,调用clear后这些指针如何删除? class Test { public: Test() {} ~Test() { cout &lt ...

随机推荐

Dnsmasq安装与配置

默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常 ...

SqlServer环境配置和卸载

一.数据库简介 SQLServer环境配置 安装好数据库以后怎么启用sa账号,来访问数据库. 1.先用windows账号登录数据库. 2.启用windows身份验证方式和sql server身份验证方 ...

JavaScript使用接口

在经典的Java面向对象语言中,可以用关键字interface来定义接口,用implement来实现接口,而JavaScript虽然也是面向对象语言,但是它并没有内置这些,不过由于JavaScript ...

4-Server安全配置

0-禁止root使用ssh登入 vim /etc/ssh/sshd_config寻找:PermitRootLogin yes改为:PermitRootLogin nosystemctl restart ...

关于oracle的相关基础语句

----给表的字段添加描述COMMENT ON COLUMN 数据库名称.表名.表字段 IS '字段描述'; ---设置自动增长 CREATE SEQUENCE emp_sequence INCREM ...

AngularJs学习笔记--concepts&lpar;概念&rpar;

原版地址:http://code.angularjs.org/1.0.2/docs/guide/concepts 继续.. 一.总括 本文主要是angular组件(components)的概览,并说明 ...

mybatis结合redis实战二级缓存(六)

之前的文章中我们意见分析了一级缓存.二级缓存的相关源码和基本原理,今天我们来分享下了mybatis二级缓存和redis的结合,当然mybatis二级缓存也可以和ehcache.memcache.OSC ...

HttpUrlConnection流传输问题(正确传输包含中文的JSON字符串)

目前在写一个功能,主要是使用 HttpURLConnection 发送http请求调用外部接口.本来一切正常的,可是在发送post请求上传数据给服务端时,服务端返回错误信息:获取的JSON请求是乱码的 ...

「NOI2003」逃学的小孩

传送门:>HERE< 题意:给出一棵树(带权),要从一个节点C先走到距离它近的一个节点B,再走到A,要求最坏情况下的总路程(即最长). 解题思路: 乍一看,A,B,C都没给出,这怎么求? ...

python-day71--django多表双下划线查询及分组聚合及F&sol;Q查询

#====================================双下划线的跨表查询===============# 前提 此时 related_name=bookList 属性查询: # 查 ...

java list 内存释放_QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)...相关推荐

  1. java 访问手机存储卡,Android App将数据写入内部存储和外部存储的示例

    File存储(内部存储) 一旦程序在设备安装后,data/data/包名/ 即为内部存储空间,对外保密. Context提供了2个方法来打开输入.输出流 FileInputStream openFil ...

  2. java怎么释放分配的内存,linux 内存的分配和释放,linux分配释放

    linux 内存的分配和释放,linux分配释放 了解内存分配机制(共享映射与请求分页) 通过 pmap 命令,可以获取用户进程逻辑地址空间中映射的内存信息: pmap -x $pid 其中 -x 表 ...

  3. java byte 释放内存_java java.nio.ByteBuffer.allocateDirect 导致内存泄露

    java能够经过java.nio.ByteBuffer.allocateDirect(capacity)直接运用non java heap(java堆外)的内存 . 一.运用意图: 1.拓荒数据缓冲区 ...

  4. android释放acitity内存,Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  5. 当退出python时是否释放全部内存_python 关于高级特性的问题

    1.函数装饰器有什么作用?请列举说明? 2. Python 垃圾回收机制? 3. 魔法函数 _call_怎么使用? 4. 如何判断一个对象是函数还是方法? 5. @classmethod 和 @sta ...

  6. FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  7. 堆外内存的介绍及释放

    热爱美好的事物,是一种追求 介绍 ____堆外内存意味着把内存对象分配在 Java 虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机), 作用:能缩短垃圾回收时间 ​ 适合生命期中等或较 ...

  8. ffmpeg源代码处理流程分析_FFmpeg源代码简单分析:内存的分配和释放

    内存操作的常见函数位于libavutil\mem.c中.本文记录FFmpeg开发中最常使用的几个函数:av_malloc(),av_realloc(),av_mallocz(),av_calloc() ...

  9. FFmpeg源代码简单分析-通用- 内存的分配和释放(av_malloc()、av_free()等)

    参考链接 FFmpeg源代码简单分析:内存的分配和释放(av_malloc().av_free()等)_雷霄骅的博客-CSDN博客_av_malloc 内容介绍 内存操作的常见函数位于libavuti ...

  10. FFmpeg内存的分配和释放---av_malloc()、av_free()等

    本文简单记录一下FFmpeg中内存操作的函数. 内存操作的常见函数位于libavutil\mem.c中.本文记录FFmpeg开发中最常使用的几个函数:av_malloc(),av_realloc(), ...

最新文章

  1. java zookeeper_Java zookeeper开发实例
  2. Vigenère 密码
  3. 4*4矩阵按键控制数码管显示0-F
  4. linux Vi搜索和替换字符串
  5. 模拟CA机构制作CA机构证书
  6. mysql xa 演示_mysql的XA事务恢复过程详解
  7. Django(三)模板
  8. win10 mysql数据库中文乱码
  9. 异常值检测 —— MAD(median absolute deviation)
  10. 软件项目管理案例教程课后答案
  11. word2016 删除页眉横线
  12. 开启双重验证后无法登录Outlook桌面版的解决方法
  13. 电脑使用哪个录制视频软件比较好
  14. css3动画实现3d旋转效果
  15. 猿创征文|当我在追光 我与光同航--我与Java的技术成长之路
  16. 原神服务器维护后抽奖池会更新吗,原神抽奖池更新次数会重置吗
  17. 喜欢纪念碑谷的你,绝不能错过它灵感之一的《FEZ》
  18. ai无法安装因为计算机中丢失,Illustrator教程之关于安装Adobe Illustrator(AI) CC 2017中遇到的问题总结...
  19. 目标检测论文:FoveaBox: Beyond Anchor-based Object Detector及其PyTorch实现
  20. 探索Java面向对象编程的奇妙世界(一)

热门文章

  1. 下载文件夹压缩为zip格式时打开报不可预料的压缩文件末端
  2. java跳转_java后端实现页面跳转的方法
  3. 如何查看网卡带宽是千兆还是百兆
  4. YOLOX代码 loss计算过程 详细注释版
  5. java 中的radix_Java Scanner radix()方法与示例
  6. 快捷方式和活动桌面小贴
  7. Java实现阿拉伯数字转换成中文大写数字,以及中文大写数字到阿拉伯数字的转换。
  8. 2017杭州云栖大会100位大咖视频+讲义全分享
  9. (转)如何将Sklearn数据集Bunch格式转换为Pandas数据集DataFrame?
  10. 1分钟激活任意Windows 系统