首页 > 其他分享 >QT 开发循环delete指针的安全操作

QT 开发循环delete指针的安全操作

时间:2024-08-16 16:50:32浏览次数:15  
标签:异步 QT 删除 对象 deleteLater 内存 delete 指针

背景

在做TcpSocket例子的时候,发下移除QList<QTcpSocket *>后,第二次重新连接发现出现异常。经过排查发现,原来是deleteLater与delete有区别
image

原因分析

deleteLater 和 delete 都是在 Qt 中用于对象内存管理的关键方法,但它们的作用和使用时机有所不同。
deleteLater 用于安全异步删除对象,delete 用于立即释放对象内存。

  • deleteLater:
    作用:deleteLater 是一个槽函数,用于在事件循环中异步删除对象。它会安排对象在稍后的时间点被删除,通常是在当前事件处理完成后。
    使用场景:主要用于需要在当前上下文之外安全删除对象的情况,比如在槽函数中删除发出信号的对象,或者在涉及线程切换的情况下删除对象。
    注意事项:由于它是异步操作,因此不能保证对象会立即被删除。对象将在事件循环中被标记为删除,并在事件处理过程中完成删除操作。
  • delete:
    作用:delete 是 C++ 中用于手动释放对象内存的操作符。它会立即销毁对象,并释放其占用的内存。
    使用场景:通常在不需要对象时、对象的生命周期结束时使用,比如在函数结束时、对象不再需要时或者在析构函数中。
    注意事项:使用 delete 会立即释放对象的内存,如果之后再尝试使用这个对象,就会引发未定义行为(UB)或者内存错误。

标签:异步,QT,删除,对象,deleteLater,内存,delete,指针
From: https://www.cnblogs.com/paylove/p/18363180

相关文章

  • MFC制作MQTT(EMQX)客户端,报错:MQTTClient_message::MQTTClient_message”: 没有重载函
    前言全局说明MQTTClient_message::MQTTClient_message”:没有重载函数接受9个参数一、说明环境:Windows7旗舰版VisualStudio2013CMakeversion3.19.8paho.mqtt.cV1.3.13二、报错MQTTClient_message::MQTTClient_message”:没有重载函数接受9个参数......
  • C++速览之智能指针
    1、存在的问题c++把内存的控制权对程序员开放,让程序显式的控制内存,这样能够快速的定位到占用的内存,完成释放的工作。但是此举经常会引发一些问题,比如忘记释放内存。由于内存没有得到及时的回收、重复利用,所以在一些c++程序中,常会遇到程序突然退出、占用内存越来越多,最后不......
  • 指针学习(3)
     目录1.字符指针变量​编辑2.数组指针变量2.1定义2.2存放3.二维数组传参的本质4.函数指针变量4.1创建4.2使用 ​编辑5.typedef关键字6.函数指针数组6.1转移表1.字符指针变量顾名思义,字符指针也就是char*,在使用中,一般简单的使用可以这样#include<stdio.h>i......
  • Qt中ui页面交互切换
    在Qt中实现UI页面之间的交互切换通常需要使用堆栈窗口(QStackedWidget)或选项卡窗口(QTabWidget)这样的控件。下面是一个简单的示例代码,演示了如何在Qt中实现UI页面的交互切换: 假设我们有两个页面,一个是Page1,另一个是Page2,我们通过点击按钮在这两个页面之间进行切换。 首先,在......
  • QT设置回调函数给python调用——参数法
    这种方法将回调函数作为python函数参数对象的方法来使用。Qt已经添加了Python库,并且能够正常调用Python的API,可以成功调用Python的代码块,这部分可以参考我另外一篇博客:1.QT相关函数定义1.1创建回调函数例如下面两个函数//实际的回调函数voidprintValue(intvalue){......
  • QT设置回调函数给python调用——内置模块法
    1.QT相关函数定义和 QT设置回调函数给python调用——参数法中的定义相同如下://实际的回调函数voidprintValue(intvalue){qDebug()<<"printValuevalue:"<<value;}intgetValue(intvalue){qDebug()<<"getValuevalue:"<<value;......
  • 指针:存放内存地址的变量
    //指针:类型跟存放变量的类型一致定义格式:数据类型*变量名;static关键字可以防止内存被释放禁止使用野指针和悬空指针特殊指针:void*p;空类型指针,可以存放任何类型指针,但是不能进行操作//指针高级应用:以字节为单位,交换两个变量的值#include<stdio.h>voidSwap(void*p1,void*......
  • C:指针学习-指针变量—学习笔记
    今日伊雷娜:目录前言:1、字符指针变量1.1使用字符指针存放字符1.2使用字符指针变量存放字符串 2、数组指针变量2.1什么是数组指针变量?2.2数组指针变量初始化2.3关于数组指针类型的解析3、函数指针变量3.1函数地址3.2 函数指针变量的创建3.3关于指针的连续......
  • C语言-使用数组法,指针法实现将一个5X5的矩阵中最大的元素放在中心,四个角分别放四个最
    1.题目要求:将一个5X5的矩阵中最大的元素放在中心·,四个角分别放四个最小的元素(顺序为从左到右,从上到下,从小到大存放),写一函数实现之。2.数组法实现#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//一、数组法实现intmain(){ intarr[5][5]={ {1,2,3,4,5},......
  • 【Qt】QSS
    QSS一、QSS1.QSS2.QSS设置方式(1)指定控件样式设置(2)全局样式设置(3)从文件加载样式表(4)使用QtDesigner编辑样式3.选择器(1)选择器介绍(2)子控件选择器(Sub-Controls)(3)伪类选择器(Pseudo-States)4.样式属性盒模型(BoxModel)5.控件样式示例(1)按钮(2)复选框(3)单选框(4)输入......