我有一个带有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);
答案 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();