QT6之qDeleteAll

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();
}

相关推荐

  1. QT6qDeleteAll

    2024-04-22 17:06:05       32 阅读
  2. Qt 6四:基础概念讲解

    2024-04-22 17:06:05       54 阅读
  3. Qt 6七:学习资源

    2024-04-22 17:06:05       60 阅读
  4. QT教程】QT6国际化

    2024-04-22 17:06:05       29 阅读
  5. <span style='color:red;'>QT</span> day<span style='color:red;'>6</span>

    QT day6

    2024-04-22 17:06:05      42 阅读
  6. Day<span style='color:red;'>6</span> <span style='color:red;'>Qt</span>

    Day6 Qt

    2024-04-22 17:06:05      67 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 17:06:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 17:06:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 17:06:05       82 阅读
  4. Python语言-面向对象

    2024-04-22 17:06:05       91 阅读

热门阅读

  1. sizeof和strlen,len的区别

    2024-04-22 17:06:05       32 阅读
  2. 华为笔试面试题

    2024-04-22 17:06:05       25 阅读
  3. 头歌平台云计算实验

    2024-04-22 17:06:05       30 阅读
  4. vue中 export default 与 export 写法的区别

    2024-04-22 17:06:05       34 阅读
  5. 日本语自然语言处理中的分词库 - GiNZA

    2024-04-22 17:06:05       33 阅读
  6. AI先驱者丹尼尔·丹尼特去世

    2024-04-22 17:06:05       32 阅读
  7. JDK中用到了哪些设计模式

    2024-04-22 17:06:05       183 阅读