QList的错误使用

2024-04-15 21:44
文章标签 使用 错误 qlist

本文主要是介绍QList的错误使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最开始写出来的代码是类似这样的: 

    QList<int*> list;for(int i=1;i<=20;i++){int * j=new int(i);list<<j;}for(int i=0;i<list.count();i++){int * m=list.at(i);list.removeOne(m);delete m;}

今天突然发现这么写问题很大!

(内存泄漏严重) 

(直接泄漏一半)

打印一下:

    for(int i=0;i<list.count();i++){int * m=list.at(i);qDebug()<<"i:"<<i<<"   list.count():"<<list.count()<<"  value:"<<*m;list.removeOne(m);delete m;}

i: 0 list.count(): 20 value: 1

i: 1 list.count(): 19 value: 3

i: 2 list.count(): 18 value: 5

i: 3 list.count(): 17 value: 7

i: 4 list.count(): 16 value: 9

i: 5 list.count(): 15 value: 11

i: 6 list.count(): 14 value: 13

i: 7 list.count(): 13 value: 15

i: 8 list.count(): 12 value: 17

i: 9 list.count(): 11 value: 19

进一步打印:

​for(int i=0;i<list.count();i++){int * m=list.at(i);qDebug()<<"i:"<<i<<"      list.count():"<<list.count()<<"     value:"<<*m;list.removeOne(m);QString str;for(int j=0;j<list.count();j++){int * n=list.at(j);str+=QString::number(*n)+" ";}qDebug()<<str;delete m;}​

 i: 0 list.count(): 20 value: 1

"2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 "

i: 1 list.count(): 19 value: 3

"2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 "

i: 2 list.count(): 18 value: 5

"2 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 "

i: 3 list.count(): 17 value: 7

"2 4 6 8 9 10 11 12 13 14 15 16 17 18 19 20 "

i: 4 list.count(): 16 value: 9

"2 4 6 8 10 11 12 13 14 15 16 17 18 19 20 "

i: 5 list.count(): 15 value: 11

"2 4 6 8 10 12 13 14 15 16 17 18 19 20 "

i: 6 list.count(): 14 value: 13

"2 4 6 8 10 12 14 15 16 17 18 19 20 "

i: 7 list.count(): 13 value: 15

"2 4 6 8 10 12 14 16 17 18 19 20 "

i: 8 list.count(): 12 value: 17

"2 4 6 8 10 12 14 16 18 19 20 "

i: 9 list.count(): 11 value: 19

"2 4 6 8 10 12 14 16 18 20 "

这不是我想要的,我希望全部都打印出来,所有内存都释放。

    QList<int*> list;for(int i=1;i<=20;i++){int * j=new int(i);list<<j;}for(int i=0;i<list.count();i++){int * m=list.at(i);qDebug()<<"value:"<<*m;delete m;}list.clear();

这样写应该比较好。

更明显的对比:

错误写法:

    QList<QLabel *> list;for(int i=1;i<=20;i++){QLabel * l=new QLabel;l->setText(QString::number(i));l->resize(300,300);l->show();list<<l;}for(int i=0;i<list.count();i++){QThread::msleep(500);QLabel * l=list.at(i);list.removeOne(l);delete l;}

正确写法:

    QList<QLabel *> list;for(int i=1;i<=20;i++){QLabel * l=new QLabel;l->setText(QString::number(i));l->resize(300,300);l->show();list<<l;}for(int i=0;i<list.count();i++){QThread::msleep(500);QLabel * l=list.at(i);delete l;}list.clear();

这篇关于QList的错误使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907003

相关文章

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

pandas DataFrame keys的使用小结

《pandasDataFramekeys的使用小结》pandas.DataFrame.keys()方法返回DataFrame的列名,类似于字典的键,本文主要介绍了pandasDataFrameke... 目录Pandas2.2 DataFrameIndexing, iterationpandas.DataF

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT