достаточно, но надо помнить, что deleteLater работает только при работающем event loop. То есть, вот в таком случае
MySuperPuperWidget* mw = new MySuperPuperWidget;
mw->show();
app.exec();
delete mw;
если MySuperPuperWidget будет в своем деструкторе делать deleteLater() каким-то дочерним обьектам, деструкторы для этих дочерних обьектов вызваны не будут.
Впрочем, такое скорее актуально не для виджетов, а просто для наследников QObject
Просто есть в принципе QStackedLayout и он, как правило, спасает в подобных ситуациях.
может, именно из него удалять и надо