Главная страница
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.01 c
2-1277805409
12
2010-06-29 13:56
2010.09.26
Mssql, пересечение периодов


2-1277531521
_MiK_
2010-06-26 09:52
2010.09.26
Как исправить поле "счётчик"? (ADO + Access)


15-1277883172
SKIPtr
2010-06-30 11:32
2010.09.26
подключение 2 сети в Windows 7


15-1277929790
Юрий
2010-07-01 00:29
2010.09.26
С днем рождения ! 1 июля 2010 четверг


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