嵌套容器上的 qDeleteAll

Posted

技术标签:

【中文标题】嵌套容器上的 qDeleteAll【英文标题】:qDeleteAll on nested containers 【发布时间】:2013-01-17 00:11:40 【问题描述】:

在 Qt 中,如果我嵌套了类似于以下内容的 QMap:

QMap<int, QMap<int, QMap<int, int*>* >* > 

一次调用 qDeleteAll 会负责递归清理内存,还是我必须通过迭代每个容器手动多次调用 qDeleteAll?

【问题讨论】:

问题是为什么要使用指向地图的指针。这几乎总是不必要的。是否有理由使用 int* 而不是 int? int* 实际上是一个数组,我正在解析文件并动态创建数组,因为我不知道会有多少,地图也是如此。一切都是动态创建的。整个结构基本上就是一个N维查找表 这就是 std::vector、QVector、QMultiMap 等的用途...... 【参考方案1】:

由于您使用的是普通指针,因此您需要自己负责递归清理内存。

如果您希望自动清理内存,请改用智能指针。 Qt 有很多可用的:Qt Smart Pointers

我相信QScopedPointer 和QSharedPointer 是您最感兴趣的。

【讨论】:

以上是关于嵌套容器上的 qDeleteAll的主要内容,如果未能解决你的问题,请参考以下文章

Spring Ioc容器 - 2

使用 xibs 嵌套@IBDesignables?

如何在颤动的列表视图中嵌套列表视图?

C++ 提高教程 STL - Vector容器嵌套容器

在深层嵌套的灵活容器中滚动

嵌套在容器日志目录中