У меня есть указатель на подкласс QWidget:
QWidget * form;
Затем я помещаю экземпляр подкласса как внутренний виджет QMdiSubWindow:
QMdiSubWindow * w = mdiArea->addSubWindow(form);
Как сделать так, чтобы объект form был удален при закрытии подокна MDI w?
@vahancho Мне кажется, что в этом случае удаляется само подокно, а не виджет внутри него.
Внутренний виджет будет удален автоматически, я думаю, из-за его родительско-дочерних отношений с окном MDI.





Согласно документация вы должны установить флаг Qt::WA_DeleteOnClose в подокне, чтобы оно автоматически удалялось после закрытия.
Вернемся к вашему актуальному вопросу: когда вы вызываете addSubWindow, он вызывает setWidget внутри. После этого шага родительский элемент переданного виджета - это объект QMdiSubWindow, для которого был сделан вызов. Следовательно, после того, как этот объект будет удален, он также удалит всех своих дочерних элементов, включая указанный виджет, как это делает [почти] любой добросовестный объект Qt.
Вы можете установить атрибут
Qt::WA_DeleteOnCloseдля своего подокна MDI, напримерw->setAttribute(Qt::WA_DeleteOnClose);