qDeleteAll 之后必须清空容器
【1】qDeleteAll应用示例
qDeleteAll源码如下:
template <typename ForwardIterator>
Q_OUTOFLINE_TEMPLATE void qDeleteAll(ForwardIterator begin, ForwardIterator end)
{
while (begin != end)
{
delete *begin;
++begin;
}
} template <typename Container>
inline void qDeleteAll(const Container &c)
{
qDeleteAll(c.begin(), c.end());
}
示例代码如下:
#include <QMap>
#include <QString>
#include <QWidget>
#include <QDebug>
#include <QApplication> class PersonInfo
{
public:
PersonInfo(int id = -, QString name = QString(), QWidget* pWidget = NULL)
: m_nId(id)
, m_name(name)
, m_pWidget(pWidget)
{} ~PersonInfo()
{
m_nId = -;
m_name = QString();
if (m_pWidget != NULL)
{
qDebug() << "delete personInfo :: " << this;
delete m_pWidget;
m_pWidget = NULL;
}
}
private:
int m_nId;
QString m_name;
QWidget* m_pWidget;
}; int main(int argc, char *argv[])
{
QApplication a(argc, argv); QMap<int, PersonInfo *> map;
for (int i = ; i < ; ++i)
{
PersonInfo *pTemp = new PersonInfo(i + , QString("hello World!"), (new QWidget()));
qDebug() << "construct personInf :: " << pTemp;
map.insert(i, pTemp);
} qDeleteAll(map); // 1.释放内存
qDebug() << "after qDeleteAll size :: " << map.size() << endl;
map.clear(); // 2.必须清空
qDeleteAll(map); // 3.再次释放内存 return a.exec();
}
打印结果如下:
construct personInf :: 0x3bdc20
construct personInf :: 0x3c0308
construct personInf :: 0x3bfe08
construct personInf :: 0x3c0a88
construct personInf :: 0x3c1248
construct personInf :: 0x3c1738
construct personInf :: 0x3c1bb8
construct personInf :: 0x3c2420
construct personInf :: 0x3c26d0
construct personInf :: 0x3c2c68
delete personInfo :: 0x3bdc20
delete personInfo :: 0x3c0308
delete personInfo :: 0x3bfe08
delete personInfo :: 0x3c0a88
delete personInfo :: 0x3c1248
delete personInfo :: 0x3c1738
delete personInfo :: 0x3c1bb8
delete personInfo :: 0x3c2420
delete personInfo :: 0x3c26d0
delete personInfo :: 0x3c2c68
after qDeleteAll size ::
尤其注意打印结果。
可以尝试把2.清空容器行注释掉,然后再运行程序,查看运行结果。
【2】总结
qDeleteAll只负责释放容器元素内存,但没有对容器的置空操作。若无意间二次再执行qDeleteAll过程,程序必会崩溃。
为了避免可恶的崩溃,切记qDeleteAll之后必须清空容器。
Good Good Study, Day Day Up.
顺序 选择 循环 总结
qDeleteAll 之后必须清空容器的更多相关文章
- 用AS3清空容器下所有子显示对象
容器中的子显示对象分为两类: 处于显示列表中的子显示对象.被numChildren所记录的. 由容器graphics对象绘制出来的矢量图.这个矢量图不属于Shape类型,不在容器的显示列表中,不被nu ...
- QT 随笔目录
[1]基础部分 <信号和槽机制> <信号与槽知识点> <QString 与 string转换> <QT 继承QWidget && 继承QDia ...
- Qt中的通用模板算法QtAlgorithms(qDeleteAll,qBinaryFind,qCountLeadingZeroBits,qPopulationCount,qFill,qSwap,qSort)
Qt在<QtAlgorithms>头文件中为我们提供了一系列的全局模板方法,这些模板方法主要用于容器操作,比如qDeleteAll().其在Qt中的声明如下: void qDeleteAl ...
- Spring容器深入(li)
spring中最常用的控制反转和面向切面编程. 一.IOC IoC(Inversion of Control,控制倒转).对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的 ...
- C++ STL vector容器学习
STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...
- HDU 4857 逃生 (反向拓扑排序 & 容器实现)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- JAVA容器
JAVA容器 一.容器体系结构 java.util 二.迭代器Iterator<E> 迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发人员并不需要了解该序列的底层结构.迭代器通常被 ...
- STL标准模板库 向量容器(vector)
向量容器使用动态数组存储.管理对象.因为数组是一个随机访问数据结构,所以可以随机访问向量中的元素.在数组中间或是开始处插入一个元素是费时的,特别是在数组非常大的时候更是如此.然而在数组末端插入元素却很 ...
- [翻译] C++ STL容器参考手册(第二章 <deque>)
返回总册 本章节原文:http://www.cplusplus.com/reference/deque/deque/ 1. std::deque template < class T, clas ...
随机推荐
- CentOS安装HBase
1.下载HBASE http://www.apache.org/dyn/closer.cgi/hbase/ 2.解压文件到安装目录 #mkdir hbase #cd hbase #tar -zxvf ...
- 使用Nginx搭建集群
反向代理: 1.首先启动一个项目,启动后可以通过http://localhost:8080/getResult访问到接口,如图: 2.修改nginx配置文件,监听www.ouyan.com的80端口, ...
- 弱网测试之基于fiddler+wanem完成
如果不想搜集安装包,可以使用我分享的按照包,如下: WANem_3.0_Beta百度网盘下载链接:https://pan.baidu.com/s/1aMf5WBsfH7Mrl8iB2NjEYg 密码: ...
- InnoDB Lock
众所周知innodb的锁是行级锁,这样说也没有问题,只是还可以细分而已.推荐阅读何登成大牛的博客http://hedengcheng.com/?p=771 innodb的锁有三种算法,分别如下: Re ...
- 使用RegisterNatives注冊原生代码
在Android开发本地代码时,有两种方式.一种是使用javah生成头文件.然后编辑源码,还有一种不用生成头文件,直接编辑代码后,使用RegisterNatives方法进行注冊,以下是一个Demo: ...
- Java设计模式(一)普通工场模式 抽象工场模式
设计模式 设计模式是前人总结的,为了解决一类问题而总结的代码设计经验. 最初可能为了使用而使用,后面就会发现.非常多没想到的问题由于使用了正确的设计模式已经为你考虑到了.<design patt ...
- 20190316 安装pip的一些问题
前提条件: 1. windows环境中安装python3.7 2.注意配置环境变量 确认python.和pip都能直接在cmd 控制台使用, 一个是python命令的地址指向,一个是pip命令的地址指 ...
- Fast-R-CNN
基于R-CNN和SPP-Net思想,RBG提出了Fast-R-CNN算法.如果选用VGG16网络进行特征提取,在训练阶段,Fast-R-CNN的速度相比RCNN和SPP-Net可以分别提升9倍和3倍: ...
- ABP-添加表
1.在My_ABP.Core根目录下先创建一个文件夹,在该文件夹里创建一个公共的类,在里面定义所需要用到的属性 public class Person:Entity { pu ...
- css页面布局--三栏(两边固定中间自适应&两边自适应中间固定)
http://www.cnblogs.com/zhanyishu/p/5656875.html