从QMap中删除指针?

时间:2013-11-04 12:01:37

标签: c++ qt pointers dynamic-allocation

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

QMap<QString, myClass*> types;

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

如何通过键删除指针? 我知道像remove这样的QMap方法。这样安全吗?

以下内容如何:

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

2 个答案:

答案 0 :(得分:7)

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

myClass *type = types.take("foo");
delete type;

答案 1 :(得分:2)

由于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();