Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.26;
Скачать: CL | DM;

Вниз

Уборка мусора   Найти похожие ветки 

 
faiwer ©   (2010-07-01 21:29) [0]

Доброго времени суток. Вопрос такой, есть следующий код:

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


 
Омлет ©   (2010-07-01 21:33) [1]

var
img: TGraphic;
begin
 img:=TJPEGImage.Create;
 try
   ...
   // img.free; <- вот этого не надо, нужно исключить подобную ситуацию
  ...
 finally
   img.free; // уничтожаем только здесь
 end;
end;


 
Омлет ©   (2010-07-01 21:34) [2]

Исходники VCL - поучись по ним.


 
Омлет ©   (2010-07-01 21:36) [3]

> но почему то уничтоженный img не считает себя nil.

Потому что nil ему никто не присвоил.
Есть даже специальная процедура - FreeAndNil.


 
faiwer ©   (2010-07-01 21:42) [4]


> // img.free; <- вот этого не надо, нужно исключить подобную
> ситуацию


Ну я, в принципе, так и сделал, вот только, всё равно такая ситуация может возникнуть.


> Есть даже специальная процедура - FreeAndNil.


Спс, буду иметь ввиду
спс


 
Омлет ©   (2010-07-01 21:47) [5]

> вот только, всё равно такая ситуация может возникнуть.

Для этого нужен очень плохой и хитрый код.


 
Leonid Troyanovsky ©   (2010-07-01 22:46) [6]


> faiwer ©   (01.07.10 21:29)  

>  Как лучше поступить в такой ситуации?

TControl.Notification; override

--
Regards, LVT.


 
faiwer ©   (2010-07-02 00:37) [7]


> TControl.Notification; override


Перегрузить метод оповещения? Хм, сурово. Возьму на заметку, thx.



Страницы: 1 вся ветка

Текущий архив: 2010.09.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1277121303
12
2010-06-21 15:55
2010.09.26
Играй .. невеселая мысля моя..


2-1277722570
rar
2010-06-28 14:56
2010.09.26
dbgrideh


15-1277748407
@!!ex
2010-06-28 22:06
2010.09.26
Проблема с заданием полей таблицы в Lua


2-1277647865
New555
2010-06-27 18:11
2010.09.26
Обработка события onMouseMove


8-1205893890
VoVan
2008-03-19 05:31
2010.09.26
fmod