我认为Qt中的Simple DOM Model Example有内存泄漏。以下代码用于创建用于跟踪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;
};
答案 0 :(得分:1)
方法的第一行if (childItems.contains(i)) return childItems[i];
将阻止哈希中的项被覆盖。