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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: виджеты и освобождение памяти.  (Прочитано 6323 раз)
maks
Гость
« : Июль 24, 2008, 01:46 »

Добрый день. У меня такой вопрос. Большинство объектов создаются через оператор new.
Но не в одном примере я не видел чтобы память из под qt объектов освобождалась.
Надо ли освобождать из под них память?
И как удалить виджет с формы?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июль 24, 2008, 07:12 »

При закрытии приложения память освобождается. Если нужно раньше удалить виджет, то используй delete.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alex03
Гость
« Ответ #2 : Июль 24, 2008, 08:03 »

При закрытии приложения память освобождается. Если нужно раньше удалить виджет, то используй delete.
Ну както Вы не правильно рассуждаете...
Память освобождать / объекты удалять надо всегда там где надо.

Для QObject и порождённых от него классов (точнее их объектов) если у объекта есть parent то этот объект уничтожается при уничтожении parent-а. Поэтому достаточно удалить parent или parent parent-а и т.д.
Если parent нулевой и объект создан на куче, то объект надо удалять. Если объект создан на стеке, то он сам удалится при выходе из "блока"/функции.
Для виджетов есть флаг Qt::WA_DeleteOnClose, позволяющий не заботиться (точнее заранее позаботиться) об удалении окна при его закрытии (В основном используется для топ-левел-виджетов).
Записан
Hort
Гость
« Ответ #3 : Июль 24, 2008, 10:55 »

в дополнение к предидущему посту:

при создании виджета оператором new надо в конструктор передать указатель на предка (для соблюдения иерархической модели). зачастую этого можно не делать, если используеш Layout'ы, класс QMainWindow и подобные, где есть методы добавления или установки виджета (addWidhet(), addToolBar(), setCentralWidget() и т.п.) - тогда у добавляемого/устанавливаемого виджета втоматически устанавливается предок тот куда добавили/установили и явно можно его не указывать. некоторые виджеты обычно удаляют оператором delete сразу после использования - это например диалоговые окна.
« Последнее редактирование: Июль 24, 2008, 10:58 от Hort » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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