4

我有一个带有 QString 键和指向 myclass 对象的值指针的 QMap。但是当我动态分配 QMap 的值时,我不知道如何从 QMap 中删除一个指针:

QMap<QString, myClass*> types;

myClass *type = types.value(typeKey);
    if (!type) {
        type = new myClass;
        types.insert(typeKey, type);

如何通过键删除指针?我知道 QMap 方法,例如remove. 那使用安全吗?

以下情况如何:

const QString key = types.key(static_cast<myClass*>());
    types.remove(key);
4

2 回答 2

10

remove()函数从地图中删除该项目,但它不会删除它,因此如果它是指向对象的指针,您必须自己做。我会通过以下方式做到这一点:

myClass *type = types.take("foo");
delete type;
于 2013-11-04T12:14:05.570 回答
3

由于 QMap::clear 不会删除指针,因此使用 qDeleteAll 函数还有另一种方法。qDeleteAll 仅适用于 QMap 和 QHash 的值,而不适用于键,即使它们是指针类型,所以下面的示例仅适用于 kay-value 容器的值。在这个值必须是指针类型。

QMap<int,Employee *> mlist;
mlist.insert(1,new Employee("Blackpool", "Stephen"));
mlist.insert(2,new Employee("Twist", "Oliver"));

qDeleteAll(mlist);
#or you can do it like
qDeleteAll(mlist.begin(),mlist.end());

更新:是的,总是在它之后使用 clear(),从地图中删除条目,例如 mlist.clear();

于 2016-11-22T05:16:28.520 回答