0

当我将元素插入 a时,我为两者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呢?是内存泄漏吗?

4

1 回答 1

4

你的代码会泄露,但不是你想的那样。

维护的QStringListQTreeWidgetItem与树项一起删除 - 这将正常工作。

但是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++;
}
于 2013-01-27T18:47:05.413 回答