当我将元素插入QTreeWidget
时,我会为QStringList
和QTreeWidgetItem
分配内存
QStringList *temp;
while(other_elements)
{
temp = new QStringList();
temp->push_back("first_field");
temp->push_back("second_field");
items.append(new QTreeWidgetItem((QTreeWidget*)0, *temp));
element_iterator++;
}
myTreeWidget->insertTopLevelItems(0, items);
我读到在调用QTreeWidgetItem
函数时会自动释放clear()
,但QStringList
呢?这是内存泄漏吗?
答案 0 :(得分:3)
您的代码会泄露,但不是您想的原因。
QStringList
维护的QTreeWidgetItem
将与树项目一起删除 - 这样可以正常工作。
但您分配的temp
不会。当您将*temp
传递给构造函数时,该项目存储副本。你分配的对象在构造函数调用之后仍然存活 - 并且因为你没有删除它,它就会被泄露。
将代码更改为以下内容以避免泄漏和不必要的堆分配:
while(other_elements)
{
QStringList temp;
temp.push_back("first_field");
temp.push_back("second_field");
items.append(new QTreeWidgetItem((QTreeWidget*)0, temp));
element_iterator++;
}