1、qDeleteAll概述
它是 Qt 提供的一个模板函数,它用于一次性删除容器中的所有对象。这个函数非常方便,尤其是在处理指针容器时,可以简化代码并减少出错的可能性。该函数适用于任何存储指向动态分配对象的指针的 STL 容器(如 QList
, QVector
, QMap
, QSet
等)。
2、qDeleteAll用途
qDeleteAll 的用途:
- 自动化内存管理:一次性清除容器中所有对象,避免遗漏和重复代码。
- 减少泄漏风险:自动和安全地删除指针,避免内存泄漏。
- 代码简洁:用一行代码替代可能的循环删除操作。
3、qDeleteAll示例
假设你有一个 QList
容器,其中存储了一些动态分配的对象的指针,你想在某个时刻删除这些对象并清空列表:
备注:调用clear方法能置空,但并不能释放其内存。qDeleteAll可以释放容器元素内存,但没有对容器的置空操作,也就是size没变。所以qDeleteAll之后必须加上clear方法
#include <QCoreApplication>
#include <QList>
#include <QDebug>
class Widget {
public:
Widget(const QString& name) : name(name) {}
~Widget() {
qDebug() << "Destroying widget:" << name;
}
QString name;
};
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QList<Widget*> widgets;
widgets.append(new Widget("Widget 1"));
widgets.append(new Widget("Widget 2"));
widgets.append(new Widget("Widget 3"));
// 使用qDeleteAll来删除所有Widget对象
qDeleteAll(widgets);
widgets.clear(); // 清空列表,确保所有指针都被移除
return app.exec();
}