0

我认为 Qt 中的简单 DOM 模型示例存在内存泄漏。以下代码用于创建用于跟踪 QDomNodes 的包装 DomItem 对象。

DomItem *DomItem::child(int i)
{
     if (childItems.contains(i))
         return childItems[i];  

     if (i >= 0 && i < domNode.childNodes().count()) {
         QDomNode childNode = domNode.childNodes().item(i);
         DomItem *childItem = new DomItem(childNode, i, this);
         childItems[i] = childItem;
         return childItem;
     }
     return 0;
}

我看不到该if条件实际上如何防止先前创建的包装器在使用的包装器中被覆盖QHash<int,DomItem*>。这是类定义:

class DomItem
{
public:
    DomItem(QDomNode &node, int row, DomItem *parent = 0);
    ~DomItem();
    DomItem *child(int i);
    DomItem *parent();
    QDomNode node() const;
    int row();

private:
    QDomNode domNode;
    QHash<int,DomItem*> childItems;
    DomItem *parentItem;
    int rowNumber;
};
4

1 回答 1

1

方法的第一行if (childItems.contains(i)) return childItems[i];, 将防止哈希中的项目被覆盖。

于 2013-05-08T07:33:47.653 回答