【问题标题】:Delete a pointer from QMap?从 QMap 中删除指针?
【发布时间】:2013-11-15 01:09:10
【问题描述】:

我有一个带有 QString 键和指向 myclass 对象的值指针的 QMap。但是当我动态分配 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);

【问题讨论】:

    标签: c++ qt pointers dynamic-allocation


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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());
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-29
        • 2013-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多