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

Вниз

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

 
aleko   (2007-01-24 22:28) [0]

Всем доброго еще раз, никак не могу въехать, как правильно
так:


var
Bmp: TBitmap;

...

  try

     Bmp := TBitmap.Create;

     // что-то делаем с Bmp    

  finally

     Bmp.Free;

  end;

...


или так:


var
Bmp: TBitmap;

...

Bmp := TBitmap.Create;

  try

 // что-то делаем с Bmp

  finally

     Bmp.Free;

  end;

...


в различных примерах всегда встречается второй вариант, хотя по идее логичнее первый, вдруг у системы недостаточно ресурсов для выделения памяти, или я не правильно думаю?


 
Джо ©   (2007-01-24 22:32) [1]

Вариант (2) — правильный. Соответственно, вариант (1) — совсем неправильный.


 
Loginov Dmitry ©   (2007-01-24 22:34) [2]

> или я не правильно думаю?


Совсем неправильно.


 
TRUNK ©   (2007-01-24 22:36) [3]


> Джо ©   (24.01.07 22:32) [1]

Полностью с тобой согласен.


 
Джо ©   (2007-01-24 22:39) [4]

> хотя по идее логичнее первый, вдруг у системы недостаточно
> ресурсов для выделения памяти, или я не правильно думаю?

Смотри.

Obj := TObj.Create;
try
 // working with Obj
finally
 Obj.Free
end;

Если при Create случится исключение, то, в согласии с правилом Object Pascal, автоматически вызовется деструктор. То есть, выполнение Obj.Free не нужно.


 
Loginov Dmitry ©   (2007-01-24 22:42) [5]

to aleko

Вот почитай: http://matrix.kladovka.net.ru/index.php?page=tryfinally


 
Джо ©   (2007-01-24 22:44) [6]

> [4] Джо ©   (24.01.07 22:39)

Забыл дописать. Мало того, если в конструкторе произойдет исключение, то присваивание значение переменной Obj в выражении Obj := TObj.Create — НЕ произойдет, и там  будет содержаться черт-знает-что. Соответственно, вызов Obj.Free — чреват черт-знает-чем.


 
aleko   (2007-01-24 23:09) [7]

Спасибо,  наставили на путь истинный, пойду читать ссылку :)



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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
15-1169312714
Ламер 2.Х
2007-01-20 20:05
2007.02.11
Что почитать


15-1169076303
DeadMeat
2007-01-18 02:25
2007.02.11
DevExpress


2-1169473545
hgd
2007-01-22 16:45
2007.02.11
Вопрос по RGB


15-1169183517
vasIzmax
2007-01-19 08:11
2007.02.11
Баян об антивирусах


1-1166168193
DelphiLexx
2006-12-15 10:36
2007.02.11
Как в DBGridEh изменять размеры колонок по ширине