Название: виджеты и освобождение памяти. Отправлено: maks от Июль 24, 2008, 01:46 Добрый день. У меня такой вопрос. Большинство объектов создаются через оператор new.
Но не в одном примере я не видел чтобы память из под qt объектов освобождалась. Надо ли освобождать из под них память? И как удалить виджет с формы? Название: Re: виджеты и освобождение памяти. Отправлено: Пантер от Июль 24, 2008, 07:12 При закрытии приложения память освобождается. Если нужно раньше удалить виджет, то используй delete.
Название: Re: виджеты и освобождение памяти. Отправлено: Alex03 от Июль 24, 2008, 08:03 При закрытии приложения память освобождается. Если нужно раньше удалить виджет, то используй delete. Ну както Вы не правильно рассуждаете...Память освобождать / объекты удалять надо всегда там где надо. Для QObject и порождённых от него классов (точнее их объектов) если у объекта есть parent то этот объект уничтожается при уничтожении parent-а. Поэтому достаточно удалить parent или parent parent-а и т.д. Если parent нулевой и объект создан на куче, то объект надо удалять. Если объект создан на стеке, то он сам удалится при выходе из "блока"/функции. Для виджетов есть флаг Qt::WA_DeleteOnClose, позволяющий не заботиться (точнее заранее позаботиться) об удалении окна при его закрытии (В основном используется для топ-левел-виджетов). Название: Re: виджеты и освобождение памяти. Отправлено: Hort от Июль 24, 2008, 10:55 в дополнение к предидущему посту:
при создании виджета оператором new надо в конструктор передать указатель на предка (для соблюдения иерархической модели). зачастую этого можно не делать, если используеш Layout'ы, класс QMainWindow и подобные, где есть методы добавления или установки виджета (addWidhet(), addToolBar(), setCentralWidget() и т.п.) - тогда у добавляемого/устанавливаемого виджета втоматически устанавливается предок тот куда добавили/установили и явно можно его не указывать. некоторые виджеты обычно удаляют оператором delete сразу после использования - это например диалоговые окна. |