Когда я вставляю элементы в 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
? Это утечка памяти?
Ваш код будет течь, но не по той причине, о которой вы думаете.
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++;
}
Других решений пока нет …