![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему
SergeyDon © (2002-05-23 14:07:00)Созданная динамически форма после уничтожения оставляет в памяти указатель на себя хотя указатели на её объекты уничтожаются?
var F:TGForm;
...
F:=TGForm.Create(MainForm);
...
в модуле GForm в обработчике OnClose
Action:=cafree;
...
oomneeq (2002-05-23 15:06:00) [1]>SergeyDon (23.05.02 14:07)
>Созданная динамически форма после уничтожения оставляет в >памяти указатель на себя хотя указатели на её объекты >уничтожаются?
>
>var F:TGForm;
>...
>F:=TGForm.Create(MainForm);
>...
>
>в модуле GForm в обработчике OnClose
>Action:=cafree;
>...
Указатель F оставляет не форма, а автор кода.
Не может форма (да и любой другой объект) сама по себе отвечать за все ссылки, на нее ссылающиеся. Давно обсосаный факт.
Это как адрес и человек. Может быть человек без адреса, может быть адрес без человека. А за порядком следят власти. :-)
Если важна тебе эта ссылка то сам должен следить.
FreeAndNil может помочь.
SergeyDon (2002-05-23 14:36:00) [2]erik © (23.05.02 14:11)
Только не в событии OnClose!
ну сделал я MainForm:=nil не в обработчике OnClose форма та видна и существует всёравно.
-----------------------------------
событие OnClose вообще в другом модуле.
Пример я написал упрощенный, что бы примерно было понятно о чём речь идет.
А если делать например так:
for i:=0 to 5 do
Application.CreateForm(TMainForm, MainForm);
формы появятся и даже будут работать но после закрытия в памяти возможно останится всякий мусор?
даже сделав MainForm:=nil то пропадет только последний указатель и неизвестно что будет с остальными?
Song (2002-05-23 14:11:00) [3]Надо приравнить её на nil
erik (2002-05-23 14:11:00) [4]Это указатель на старый адрес. Если хочеш то после уничтожения формы присваивай F := nil; Только не в событии OnClose!