Использовать умный указатель
class Node: public QObject
{
std::unique_ptr<Node> parent;
}
Если вы назначите родительский указатель, он будет удален при уничтожении, если вы этого не сделаете, ничего не произойдет:)
Я бы также рекомендовал использовать умный указатель в списке:
std::list<std::unique_ptr<node> > node_list;
, который можно ввести в
typedef std::unique_ptr<node> node_up_t;
typedef std::list<node_up_t> node_list_t;
или что-то лучше
Таким образом, когда элемент удаляется из списка, он автоматически удаляется, то же самое верно и для уничтожения списка.
Для кода без пользовательского интерфейса я настоятельно рекомендую использовать стандартные контейнеры, поскольку они являются стандартными и уменьшают зависимость от библиотеки.