Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];
ВнизУборка мусора Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c