01
内存泄漏的根源:Qt对象树机制详解
new出来的对象何时被delete,父子关系如何影响生命周期。
对象树父子关系
02
指针越界的典型场景
QList/QVector越界访问、QString越界、数组下标越界,以及如何用at()和value()安全访问。
越界at()value()
03
智能指针在Qt中的应用
QSharedPointer、QWeakPointer、QScopedPointer的使用场景与注意事项。
智能指针QSharedPointer
04
QObject::deleteLater()的正确用法
何时调用、与直接delete的区别、事件循环中的执行时机。
deleteLater事件循环
05
信号与槽中的内存陷阱
Lambda表达式捕获this导致野指针、槽函数中delete sender的风险。
Lambda野指针
06
QWidget与QDialog的内存管理
模态对话框的栈分配与堆分配,close()与hide()的区别。
QDialogclose/hide
07
QThread与工作对象的内存泄漏
moveToThread后对象的释放顺序,线程退出时资源清理。
QThreadmoveToThread
08
QTimer与定时器泄漏
未停止的定时器导致对象无法释放,start()与stop()的配对使用。
QTimerstart/stop
09
QPixmap与QImage的大对象泄漏
图片资源未释放导致内存暴涨,使用QSharedData与隐式共享。
QPixmap隐式共享
10
QNetworkAccessManager与网络请求泄漏
Reply对象未deleteLater,连接未断开。
网络请求deleteLater
11
QProcess与外部进程管理
进程未关闭、信号未断开导致的内存残留。
QProcess进程管理
12
QSettings与配置文件泄漏
频繁打开关闭句柄未释放,使用单例模式管理。
QSettings单例
13
QSqlDatabase与数据库连接泄漏
连接名重复创建、未关闭数据库。
数据库连接泄漏
14
QGraphicsScene与QGraphicsItem的内存管理
Item从Scene移除后是否自动释放。
GraphicsItem释放
15
QTreeWidget/QTableWidget的Item内存泄漏
clear()与takeItem()的区别,手动释放Item。
QTreeWidgettakeItem
16
QComboBox与QListWidget的Item泄漏
addItem传入new对象后的所有权问题。
QComboBox所有权
17
QMenu与QAction的内存管理
动态创建的菜单项如何正确释放。
QMenuQAction
18
QLayout与子控件泄漏
删除布局中的控件时,布局是否自动调整引用计数。
QLayout引用计数
19
QPropertyAnimation与动画泄漏
动画未停止导致对象引用计数异常。
动画引用计数
20
QFile与文件句柄泄漏
文件未关闭、QFileDevice未正确析构。
QFile句柄泄漏
21
QBuffer与内存缓冲区泄漏
缓冲区未清空、重复创建导致内存碎片。
QBuffer内存碎片
22
QThreadPool与QRunnable泄漏
Runnable未设置autoDelete,线程池未清理。
QThreadPoolautoDelete
23
QMutex与死锁导致的内存泄漏
锁未释放导致线程阻塞,对象无法析构。
QMutex死锁
24
QCache与缓存策略
缓存对象未设置最大容量,导致无限增长。
QCache缓存策略
25
QStandardPaths与临时文件泄漏
临时文件未清理,路径拼接错误。
临时文件QStandardPaths
26
QJsonDocument与JSON解析泄漏
大JSON文档未及时释放,Document对象生命周期管理。
QJsonDocument生命周期
27
QXmlStreamReader与XML解析泄漏
Reader未关闭,流对象未正确清理。
XMLQXmlStreamReader
28
QRegularExpression与正则表达式缓存
频繁编译正则导致内存碎片,使用静态缓存。
正则静态缓存
29
QMetaObject与反射泄漏
动态属性未清理,元对象系统引用计数异常。
QMetaObject反射
30
综合实战:检测与修复内存泄漏
使用Valgrind/Dr.Memory/AddressSanitizer检测Qt程序内存泄漏,修复真实项目。
ValgrindAddressSanitizer实战