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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Иерархия объектов и утечка памяти...  (Прочитано 5615 раз)
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« : Январь 08, 2010, 02:22 »

Всегда замечал, что в Qt даже при задании предка и дальнейшем его удалении память не освобождается...Сегодня решил проверить это и действительно..Соединил сигнал destroyed() дочернего объекта со слотом, который выводит отладочную печать..и что? ничего не происходит! Сигнал высылается только при непосредственном delete объекта..
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
niXman
Гость
« Ответ #1 : Январь 08, 2010, 02:52 »

Цитировать
Сигнал высылается только при непосредственном delete объекта..
а вы чего ожидали?
с помощью new кто память выделил?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #2 : Январь 08, 2010, 02:58 »

А как же ответственность родителя за дочерние объекты?
Только вот вроде до меня доходит...родитель должен в стеке быть?
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
niXman
Гость
« Ответ #3 : Январь 08, 2010, 03:09 »

Цитировать
А как же ответственность родителя за дочерние объекты?
родитель, не обязан знать о своих производных.
читайте паттерны Абстрактная_Фабрика и Строитель.
http://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

и приведите пример. а то это оооочень объемная тема.
Записан
ilot
Гость
« Ответ #4 : Январь 08, 2010, 07:01 »

А как же ответственность родителя за дочерние объекты?
Только вот вроде до меня доходит...родитель должен в стеке быть?
По поводу ответственности родителя за дочерние объекты и вытекающую отсюда зачистку памяти можешь почитать в соседней ветке http://www.prog.org.ru/index.php?topic=11963.msg75046#msg75046.
Записан
ilot
Гость
« Ответ #5 : Январь 08, 2010, 10:29 »

Цитировать
А как же ответственность родителя за дочерние объекты?
родитель, не обязан знать о своих производных.
читайте паттерны Абстрактная_Фабрика и Строитель.
Весь вопрос в том, кто отвечает за удаление объекта. Если родитель должен отвечать за удаление потомков (как это делается в Qt), то он обязан о них знать.
Абстрактная_Фабрика - полиморфная иерархия в чистом виде. Ничего общего с отношением "родитель-потомок", используемым в Qt нету. Весь смысл в том, что экземпляр базового класса вообще не создается, а используется только его интерфейс. В примере для Абстрактной_Фабрики нет никакого каскадного удаления потомков; объекты, созданные в куче, удаляются явно.

Кстате, в примере про Абстрактную фабрику допущена ошибка, которая в перспективе может привести к трудноотслеживаемой утечке памяти...(какая? Подмигивающий)
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #6 : Январь 08, 2010, 12:25 »

http://rghost.ru/804536 вот сделал тестовый проект и все нормально работает...но в объемной программе почечу-то вызова delete дочерних объектов не происходит.. буду разбираться, наверное сам накосячил..А кстати лэйауты отвечают за вызов delete добавленных виджетов?
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Dendy
Гость
« Ответ #7 : Январь 08, 2010, 12:31 »

Сами лейоуты - нет. Они просто делают виджеты дочерними того окна, на который этот лейоут устанавливается. То-есть за удаление отвечает всё та же иерархия QObject'ов.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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