Главная страница
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.04 c
15-1169092383
Тензор
2007-01-18 06:53
2007.02.11
Что такое матрица инерции в ODE ?


15-1169130890
Stanislav
2007-01-18 17:34
2007.02.11
Кто настраивал GPS/GPRS трекеры?


6-1157972778
wezzz
2006-09-11 15:06
2007.02.11
Защита почтовых сообщений.


2-1169833568
*Ray*
2007-01-26 20:46
2007.02.11
Модификация данных в базе данных


2-1169665333
rolex
2007-01-24 22:02
2007.02.11
TreeView