Утечка памяти при вставке элементов в 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? Это утечка памяти?

0

Решение

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

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++;
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]