删除QMap中的所有值
Deleting all values from a QMap
我有一个QMap由指向类对象的指针组成,使用new
分配。我需要删除所有这些指针。用QMap做这件事的正确方法是什么?我可以这样做:
QList<ClassName*> allVals = map.values();
for (QList<ClassName*>::iterator it = allVals.begin(), endIt = allVals.end(); it != endIt; ++it) {
delete *it;
}
最好的方法是使用qDeleteAll(…):
qDeleteAll( map ); // deletes all the values stored in "map"
map.clear(); // removes all items from the map
qDeleteAll(...)
可以在所有Qt的容器上使用。这样,您就不需要担心循环,也不需要担心逐个删除项。
如果键和值都存储为指针。您需要对键和值执行两次qDeleteAll
。顺序不重要。简单的例子:
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QHash>
class MyKey
{
public:
MyKey(int val)
{
m_val = val;
qDebug() << "ClassKey()";
}
~MyKey()
{
qDebug() << "~ClassKey() " << m_val;
}
private:
int m_val;
};
class MyValue
{
public:
MyValue(int val)
{
m_val = val;
qDebug() << "ClassValue()";
}
~MyValue()
{
qDebug() << "~ClassValue() " << m_val;
}
private:
int m_val;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QHash<MyKey *, MyValue *> hash;
for (int i = 0; i < 10; ++i)
{
hash.insert(new MyKey(i), new MyValue(10 + i));
}
qDeleteAll(hash.keyBegin(), hash.keyEnd());
qDeleteAll(hash.begin(), hash.end());
hash.clear();
return a.exec();
}
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- 如何从QMap中删除值
- 删除作为指针的 QMap 值
- 删除QMap中的所有值