[英]Deleting all values from a QMap
我有一个 QMap 包含指向 class 对象的指针,使用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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.