qt 4.7 removeChild() и память

Я пишу приложение C++ qt. В одной части я создаю QTreeWidget. Пользователь имеет все возможности для создания и удаления записей в этом дереве. Итак, когда пользователь создает элемент, он вызывает функцию, которая затем сама вызывает:

QTreeWidgetItem* newItem = new QTreeWidgetItem();

Когда позже пользователь решит удалить запись, он вызывает функцию, которая затем сама вызовет:

QTreeWidgetItem* curItem = _ui->qTreeWidget->currentItem();
QTreeWidgetItem* parent = curItem->parent();
parent->removeChild(curItem);

Стирающий для меня теперь вопрос: а что с памятью, которую занимал этот пункт? Что документ Qt 4.7 говорит об удаленииChild, так это следующее:

void QTreeWidgetItem::removeChild ( QTreeWidgetItem * child ) Удаляет данный элемент, указанный дочерним. Удаленный элемент не будет удален.

Итак, как удалить ребенка?

Заранее большое спасибо! Донни


person Donny    schedule 27.07.2011    source источник
comment
@Donny: я заметил, что вы новичок в SO (StackOverflow), поэтому, прежде всего, добро пожаловать на этот сайт! Вы ознакомились с часто задаваемыми вопросами? Я просто спрашиваю, потому что заметил, что вы не проголосовали ни за один из ответов на свой вопрос. Если вы найдете ответ полезным, вы должны нажать на маленький треугольник, указывающий вверх слева от ответа; это вознаградит плакат репутацией и покажет, что ответ был полезным. Если вы уже знакомы с обычаями SO и не голосовали специально, просто проигнорируйте этот комментарий :)! В любом случае, получайте удовольствие от SO!   -  person Luc Touraille    schedule 27.07.2011


Ответы (2)


Как насчет

delete curItem;

?

Согласно документации, деструктор удалит элемент из дерева, в которое он включен, поэтому я думаю, что вам даже не нужно заранее выполнять removeChild.

person Luc Touraille    schedule 27.07.2011

Обычно вы просто удаляете свой объект в нужное время с помощью:

delete curItem;

Удаление просто удаляет его ссылку из родителя.

или запланируйте его для удаления позже:

curItem->deleteLater();
person Phil Hannent    schedule 27.07.2011
comment
QTreeWidgetItem НЕ является QObject, поэтому вы не можете вызывать для него deleteLater(). - person Chris; 27.07.2011