我认为 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;
};