Почему в C++/Qt нельзя просто взять и забыть про сырые указатели
Современный C++ активно продвигает умные указатели для управления памятью, но при работе с фреймворком Qt разработчики вынуждены часто возвращаться к использованию обычных, «сырых» указателей. Это создаёт заметный диссонанс между лучшими практиками языка и реалиями конкретного инструмента.Основная причина в том, что архитектура Qt построена вокруг объектной модели, использующей механизм родительства. Многие классы Qt, особенно виджеты, управляют временем жизни своих дочерних объектов самостоятельно, автоматически удаляя их.Когда объекту Qt в качестве родителя передаётся умный указатель, возникает конфликт систем управления памятью. Фреймворк и умный указатель начинают конкурировать за право удалить объект, что с высокой вероятностью приводит к падению программы из-за двойного освобождения памяти.Кроме того, сигнально-слотовая система Qt, основанная на метаобъектах, также рассчитана на работу с обычными указателями. Использование умных указателей в этих механизмах часто требует сложных обёрток и не является естественным для фреймворка.Таким образом, попытка использовать исключительно умные указатели в Qt-приложении не только усложняет код, но и нарушает внутреннюю логику фреймворка. Это вынуждает разработчиков комбинировать оба подхода, выбирая инструмент в зависимости от контекста.
Источник:
https://habr.com/ru/articles/1...
Добавил
uster247 6 часов 55 минут назад
нет комментариев
проблема (1)
Комментарии участников:
Ни одного комментария пока не добавлено
