Когда вызывается деструктор объекта Dummy, также вызывается его деструктор базового класса QWidget (C ++), а деструктор QWidget заботится об удалении любых виджетов, родительским объектом которых является этот объект Dummy. То есть каждый дочерний объект этого объекта-пустышки автоматически удаляется.
Это повторяется, поэтому дети всех детей удаляются.
Таким образом, при закрытии приложения Qt единственными QWidgets (ну, фактически, QObjects), которые вам нужно удалить вручную, являются те, чьи родители равны 0, то есть родительские объекты верхнего уровня. Их деструкторы автоматически обеспечат уничтожение всех своих детей.
Как описано на странице пространства имен *1007*, есть также флаг Qt :: WA_DeleteOnClose. Это:
Заставляет Qt удалить этот виджет, когда он принял событие закрытия (см. QWidget :: closeEvent ()).
Я думаю, что этот флаг обычно не используется. Таким образом, хорошее общее правило - просто убедиться, что вы удаляете свои виджеты верхнего уровня, когда приложение закрывается.