Да уж наворотили в Qt всего
.
Архитектура Qt закладывалась во времена без unique_ptr, shared_ptr и move семантики.
Но вопросы владения ресурсами и механизм RAII никто не отменял.
Как разработчик будет управлять ресурсами - это его дело.
Можно new/delete использовать и сырые указатели (типа классические), но это трудоемко в плане подчистки ресурсов. Как минимум нужно в деструкторе удалить, а желательно ещё учесть возможность обработки исключений. Умные указатели unique_ptr, shared_ptr и другие решают задачу подчистки ресурсов, с ними проще.
Разработчики Qt в своей архитектуре смешали вопрос иерархии экземпляров объектов и вопрос владения, заложив правило, что верхний в иерархии объект удаляет объекты ниже в иерархии. Это привело к тому, что в Qt традиционно используют сырые указатели. Тем не менее, сами разработчики Qt рекомендуют использовать unique_ptr для управления ресурсами (стандартный почти аналог QScopedPointer).
При использовании сырых указателей классической ошибкой новичков является не указание родителя у экземпляра объекта (чаще всего this)
C++ (Qt)
QObject * obj = new QObject; // должно быть QObject( this )
В этом случае никто не владеет объектом, куда указывает obj => потенциальные утечки ресурсов памяти.
В случае с умным указателем
C++ (Qt)
unique_ptr< QObject > obj = make_unique< QObject >();
ресурсом владеет умный указатель, который в любом случае удалит объект, на который указывает obj.