Russian Qt Forum
Ноябрь 24, 2024, 03:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Qt и управление памятью  (Прочитано 11716 раз)
0v.v0
Гость
« Ответ #15 : Апрель 24, 2016, 21:11 »

Тогда если подвести итог, имеем что-то такое (если нужно - поправляйте):
1. Графика вся контролируется контейнерами виджетов, модели через QScopedPointer.
2. Множественного контроля графики быть не может, потому что все виджеты располагаются иерархично, а модели используют QSharedPointer.
3. Слабые ссылки в виджетах имитируются сигналами, модели могут спокойно использовать QWeakPointer.
Записан
Bepec
Гость
« Ответ #16 : Апрель 24, 2016, 21:49 »

Если итог, можете делать как хотите, это C++. Хоть всё на чистые указатели перепишите Веселый
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Апрель 25, 2016, 08:17 »

Тогда если подвести итог, имеем что-то такое (если нужно - поправляйте):
1. Графика вся контролируется контейнерами виджетов, модели через QScopedPointer.
2. Множественного контроля графики быть не может, потому что все виджеты располагаются иерархично, а модели используют QSharedPointer.
3. Слабые ссылки в виджетах имитируются сигналами, модели могут спокойно использовать QWeakPointer.
Если речь идет (а она идет) об UI, то применение вумных указателей ограничено. Виджеты могут передаваться от одного парента другому и парент может вызвать delete. Поэтому shared пролетает, а без него нет смысла и в weak. Но шаг в сторону (напр "модель"), и все по-другому, умные указатели могут быть вполне уместны.

Вообще часто возникает ситуация когда объект использует др объект, но не владеет им, т.е. не отвечает за его создание/удаление. При этом weak не всегда подходит т.к. используемый может и не иметь явного владельца. Тут мне нравится решение с ID. Храним напр qint64 и всякий раз запрашиваем указатель на используемый объект по этому ID. Появляется много интересных/элегантных решений, особенно для (де)сериализации и undo, где с указателями долго пыхтеть.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #18 : Апрель 28, 2016, 10:33 »

2. Если несколько объектов должны владеть объектом, уже начинаются вопросы. Например, 2 представления используют одну модель. Кто её будет освобождать? Пока что на примете единственный вариант - создавать эту модель в классе, который владеет всеми представлениями.

Память из-под модели будет высвобождать её родитель. Вполне вероятно, что родителем можно сделать виджет, в котором находятся ваши представления.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.08 секунд. Запросов: 22.