![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уборка мусора
faiwer © (2010-07-01 21:29:00)Доброго времени суток. Вопрос такой, есть следующий код:
var
img: TGraphic;
begin
...
try
img:=TJPEGImage.Create; // TBitMap, TPNGImage, TGIFImage
// в зависимости от ситуации
...
img.free;
...
finally
if img<>nil then img.free;
end;
end;
Суть такова, что img к концу кода может быть уже уничтоженным, а может и не быть. я делаю проверку if img<>nil чтобы избежать ошибки, но почему то уничтоженный img не считает себя nil. Как лучше поступить в такой ситуации? Код в принципе переделал так, чтобы такой ситуации не возникало, но в целом интересно. В Delphi Prism можно было бы сделать так: img:free;
P.S. D2009, W7
faiwer (2010-07-02 00:37:00) [1]
> TControl.Notification; override
Перегрузить метод оповещения? Хм, сурово. Возьму на заметку, thx.
Leonid Troyanovsky (2010-07-01 22:46:00) [2]
> faiwer © (01.07.10 21:29)
> Как лучше поступить в такой ситуации?
TControl.Notification; override
--
Regards, LVT.
Омлет (2010-07-01 21:47:00) [3]> вот только, всё равно такая ситуация может возникнуть.
Для этого нужен очень плохой и хитрый код.
faiwer (2010-07-01 21:42:00) [4]
> // img.free; <- вот этого не надо, нужно исключить подобную
> ситуацию
Ну я, в принципе, так и сделал, вот только, всё равно такая ситуация может возникнуть.
> Есть даже специальная процедура - FreeAndNil.
Спс, буду иметь ввиду
спс
Омлет (2010-07-01 21:36:00) [5]> но почему то уничтоженный img не считает себя nil.
Потому что nil ему никто не присвоил.
Есть даже специальная процедура - FreeAndNil.
Омлет (2010-07-01 21:34:00) [6]Исходники VCL - поучись по ним.
Омлет (2010-07-01 21:33:00) [7]
var
img: TGraphic;
begin
img:=TJPEGImage.Create;
try
...
// img.free; <- вот этого не надо, нужно исключить подобную ситуацию
...
finally
img.free; // уничтожаем только здесь
end;
end;