2013-11-04 91 views
2

我有一个带有QString键的QMap,并带有指向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); 

回答

7

remove()功能从地图中删除的项目,但它不会删除它,所以你必须自己做,如果它是一个指向对象。我会做,在下列方式:

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

由于QMAP ::明确不删除的指针,有一个与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());