在QTreeWidget中插入元素时内存泄漏?

时间:2013-01-27 18:38:11

标签: c++ qt qt4 qtreewidget

当我将元素插入QTreeWidget时,我会为QStringListQTreeWidgetItem分配内存

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呢?这是内存泄漏吗?

1 个答案:

答案 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++;
}