У меня есть два класса Node и NodeContainer:Оптимальный способ самостоятельно удаления QObjects
class Node: public QObject
{
NodeContainer* parent;
}
class NodeContainer : QObject
{
bool deleteChild(Node*child)
{
if(childNodes->remove(child))
{
deleteLater(child);
}
}
QList<Node*> childNodes;
}
Узел может либо иметь родителя или нет. Что такое лучший способ осуществить уничтожение класса Node:
1) Доступ к родителю и уничтожить себя оттуда
destroy()
{
if(parent !=0)
{
parent.deleteChild(this);
}
else
{
deleteLater(this);
}
}
2) Выделяют сигнал, и пусть родитель уничтожить его позже
destroy()
{
if(parent !=0)
{
//Once the parent receives it, the parent will delete the child.
emit parentYouHaveToDeleteChild(this);
}
else
{
deleteLater(this);
}
}
Подключите родителя к «разрушенным» сигналам своих детей и установите указатели, если дети уничтожены с помощью 'deleteLater'. Тогда нет необходимости проверять родителя. Кроме того, ваша схема выглядит очень странно. Вы уверены, что это то, что вы хотите? – pmr
Я делаю небольшой текстовый редактор (с тегами). Если тег решает, что он должен быть уничтожен, ему необходимо попросить его содержать тег, чтобы удалить его. В качестве примера ( Bla bla еще bla bla ). Если решает удалить, он должен попросить tag1 удалить его из своего списка childs. –
Anton
Вы не хотите использовать ['QDomDocument'] (http://qt-project.org/doc/qt-4.8/qdomdocument.html) вместо написания собственных структур данных? – alexisdm