从QMap中删除指针?

elg*_*ino 3 c++ qt pointers dynamic-allocation

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

QMap<QString, myClass*> types;

myClass *type = types.value(typeKey);
    if (!type) {
        type = new myClass;
        types.insert(typeKey, type);
Run Code Online (Sandbox Code Playgroud)

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

以下内容如何:

const QString key = types.key(static_cast<myClass*>());
    types.remove(key);
Run Code Online (Sandbox Code Playgroud)

vah*_*cho 9

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

myClass *type = types.take("foo");
delete type;
Run Code Online (Sandbox Code Playgroud)


Sac*_*ale 5

由于 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());
Run Code Online (Sandbox Code Playgroud)

更新:是的,总是在其后使用clear(),以从映射中删除条目,例如mlist.clear();