Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов Release у формы [D7, WinXP]


gosha73 ©   (2008-08-13 13:05:00) 

Приветствую.
Задался следующим вопросом:
При закрытии своей проги начинаю уничтожать форму, которую сам создал динамически и без владельца. В деструкторе главной формы вызываю:
if Assigned(FFormTemp) then FFormTemp.Release;
Но под отладчиком я не вижу чтобы вызывался деструктор у класса формы FFormTemp. Т.е. такое ощущение, что приложение уничтожается раньше, чем успеет отработать деструктор у FFormTemp. Получается нет смысла вызывать FFormTemp.Release в деструкторе главной формы, т.к. приложение завершится раньше, чем отработает очередь сообщений формы FFormTemp. Действительно ли это так? Или в данном случае все-таки надо вызывать FFormTemp.Free, не смотря на то, что для форм такой вызов не рекомендуется?


Amoeba   (2008-08-13 15:32:00) [1]


> создал динамически и без владельца

Если бы создал с владельцем, то и вопрос не пришлось задавать. Какая цель преследовалась?


gosha73   (2008-08-13 15:07:00) [2]


> Сергей М.

Спасибо, моя невнимательность меня подвела. Просто при вызове Free у меня вылетало AV по нулевому адресу, подумал что наверно надо везде юзать Release вместо Free, а оказалось все проще, у меня просто дважды эта форма уничтожалась, слишком много кода в деструкторе было - не заметил. Всем спасибо.


Сергей М.   (2008-08-13 14:27:00) [3]


> gosha73


theform - этаформа

Подучи английский - это явно не помешает.


Сергей М.   (2008-08-13 14:26:00) [4]

Имеется ввиду, что в обработчиках событий формы или контролов на этой форме для уничтожения этойформы следует использовать метод Release (aka defered free = отложенное освобождение) вместо Free во избежание возникновения исключительной ситуации.
Для уничтожения другихконтролов и форм, т.е. не имеющих никакого отношения к этойформе или ее контролам, допустимо и рекомендуется вызывать метод Free.


Palladin   (2008-08-13 14:22:00) [5]

ключевая фраза: Any event handlers for the form or its children


gosha73   (2008-08-13 14:18:00) [6]

Возможно я недопонял сам хелп конечно. Поясните тогда пожалуйста.


gosha73   (2008-08-13 14:16:00) [7]

Ну как и многие я смотрю временами в help, там есть такая строчка:
Any event handlers for the form or its children shoulduse Release instead of Free (Delphi) or delete (C++).


Сергей М.   (2008-08-13 13:52:00) [8]


> все-таки надо вызывать FFormTemp.Free, не смотря на то,
> что для форм такой вызов не рекомендуется?


Кем не рекомендуется-то ?

И кем, напротив, рекомендуется relese, коль скоро ты решил использовать именно его ?


Германн   (2008-08-13 13:51:00) [9]


> Растиражировали этот Release - теперь мучаются.

Так тиражировали для других случаев, а пользуют где попало. Нет бы справку почитать.

> Или в данном случае все-таки надо вызывать FFormTemp.Free,
>  не смотря на то, что для форм такой вызов не рекомендуется?
>

Кем не рекомендуется?


Anatoly Podgoretsky   (2008-08-13 13:42:00) [10]

Растиражировали этот Release - теперь мучаются.


{RASkov}   (2008-08-13 13:35:00) [11]

А Релиз может и не дойти :) Там же постмессаге...)


{RASkov}   (2008-08-13 13:34:00) [12]

Когда приложение закрывается и в следствии чего будет закрыто - виндовс сама все удалит из памяти, касаемо закрывшегося приложения.
Т.е. если память пытаешься освободить на закрытие программы, то это никчемное занятие.
А вообще - освобождение за собой памяти - это есть хорошо.


Наверх

Титульная страница Поиск, карта сайта Написать письмо