【问题标题】:Deleting all values from a QMap从 QMap 中删除所有值
【发布时间】:2015-07-05 00:54:55
【问题描述】:

我有一个由指向类对象的指针组成的 QMap,使用 new 分配。我需要删除所有这些指针。使用 QMap 执行此操作的正确方法是什么?我可以这样做:

QList<ClassName*> allVals = map.values();
for (QList<ClassName*>::iterator it = allVals.begin(), endIt = allVals.end(); it != endIt; ++it) {
    delete *it;
}

但是有没有更好的方法来做同样的事情?

【问题讨论】:

标签: c++ qt pointers qmap


【解决方案1】:

最好的方法是使用qDeleteAll(...):

qDeleteAll( map );  //  deletes all the values stored in "map"
map.clear();        //  removes all items from the map

qDeleteAll(...) 可以用于所有 Qt 的容器。这样您就不必担心循环,也不必担心单独删除项目。

【讨论】:

  • 我声明了一个这样的 QMap QMap&lt;int, QString&gt; list_items;。当我使用qDeleteAll(list_items) 时,我收到一条错误消息是error: type 'const class QString' argument given to 'delete', expected pointer。你对这种情况有什么想法吗?
  • @TanViet 您可以使用 qDeleteAll 以防您在地图中存储指针。您有此错误,因为您按值存储,然后尝试将其作为指针删除。看看这里[link]qt-project.org/doc/qt-4.8/qtalgorithms.html#qDeleteAll我认为 list_items.clear() 在你的情况下就足够了。
  • @miks131 是正确的。当地图包含指针时,您只需要使用qDeleteAll(…)。当地图被删除或清除时​​,其中的项目将失去作用域并被销毁,但指针将悬空,除非您先删除它们,否则您会泄漏内存。因此,如果地图包含必须删除的指针,典型的策略是在清除或删除地图之前使用qDeleteAll(…)。否则qDeleteAll(…) 是不必要的。
  • 如果你的key也是指针,qDeleteAll会删除吗?
猜你喜欢
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 2016-07-13
  • 2018-09-10
  • 2015-12-30
相关资源
最近更新 更多