Утечка памяти при вставке элементов в QTreeWidget?

Когда я вставляю элементы в 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? Это утечка памяти?


person Johnny Pauling    schedule 27.01.2013    source источник
comment
чтобы избежать этого, вы можете использовать перегруженный operator<<, чтобы сделать это, вы просто вызываете items.append(new QTreeWidgetItem(0, QStringList() << "first_field" << "second_field"); soo long zai   -  person Zaiborg    schedule 28.01.2013


Ответы (1)


Ваш код будет просачиваться, но не по той причине, по которой вы думаете.

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++;
}
person Mat    schedule 27.01.2013