QT 开发循环delete指针的安全操作
背景
在做TcpSocket例子的时候,发下移除QList<QTcpSocket *>后,第二次重新连接发现出现异常。经过排查发现,原来是deleteLater与delete有区别
原因分析
deleteLater 和 delete 都是在 Qt 中用于对象内存管理的关键方法,但它们的作用和使用时机有所不同。
deleteLater 用于安全异步删除对象,delete 用于立即释放对象内存。
- deleteLater:
作用:deleteLater 是一个槽函数,用于在事件循环中异步删除对象。它会安排对象在稍后的时间点被删除,通常是在当前事件处理完成后。
使用场景:主要用于需要在当前上下文之外安全删除对象的情况,比如在槽函数中删除发出信号的对象,或者在涉及线程切换的情况下删除对象。
注意事项:由于它是异步操作,因此不能保证对象会立即被删除。对象将在事件循环中被标记为删除,并在事件处理过程中完成删除操作。 - delete:
作用:delete 是 C++ 中用于手动释放对象内存的操作符。它会立即销毁对象,并释放其占用的内存。
使用场景:通常在不需要对象时、对象的生命周期结束时使用,比如在函数结束时、对象不再需要时或者在析构函数中。
注意事项:使用 delete 会立即释放对象的内存,如果之后再尝试使用这个对象,就会引发未定义行为(UB)或者内存错误。
本文来自博客园,作者:一个小笨蛋,转载请注明原文链接:https://www.cnblogs.com/paylove/p/18363180
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义