![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов 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]Когда приложение закрывается и в следствии чего будет закрыто - виндовс сама все удалит из памяти, касаемо закрывшегося приложения.
Т.е. если память пытаешься освободить на закрытие программы, то это никчемное занятие.
А вообще - освобождение за собой памяти - это есть хорошо.