Qt 高阶 09|Qt 内存泄漏排查 Valgrind 使用、Qt 智能指针实战
·
一、Qt 内存泄漏常见原因
- QObject 堆对象未指定父对象,未手动 delete;
- 重复创建对象、循环引用;
- 动态库、第三方库内存未释放。
二、Valgrind 排查工具(Linux/macOS)
Windows 可搭配 Visual Leak Detector,Linux/macOS 首选 Valgrind。
- 安装:
sudo apt install valgrind - 运行检测:
bash
运行
valgrind --leak-check=full ./AppName
- 关键字解读:
definitely lost:确定泄漏,必须修复;indirectly lost:间接泄漏,跟随上面一并修复。
说明:Qt 框架自身少量内存为框架缓存,可忽略。
三、Qt 智能指针使用
1. QPointer(弱指针,监视 QObject)
对象销毁后自动置空,防止野指针。
cpp
运行
QPointer<QWidget> ptr(new QWidget);
if(ptr) ptr->show();
2. QSharedPointer 共享智能指针(引用计数)
自动管理生命周期,无需手动 delete。
cpp
运行
QSharedPointer<QWidget> sp(new QWidget);
sp->show();
四、Qt 内存最佳实践
- 界面控件优先使用父子内存管理,创建时传入 parent;
- 独立堆对象使用智能指针;
- 非模态窗口开启
WA_DeleteOnClose; - 定期用 Valgrind 做泄漏检测。
小结
开发阶段养成良好内存写法,上线前用 Valgrind 完整检测,双方案结合彻底解决内存泄漏。
更多推荐
所有评论(0)