Главная страница
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.046 c
15-1169326330
kayman11111
2007-01-20 23:52
2007.02.11
спутник


15-1169108883
@!!ex
2007-01-18 11:28
2007.02.11
Работа... Есть?


1-1166611676
_ozzy_
2006-12-20 13:47
2007.02.11
Как запретить подтверждение на замену(удаление) Windows?


15-1169144266
iXT
2007-01-18 21:17
2007.02.11
RUS vs ENU


1-1165021404
allrussia
2006-12-02 04:03
2007.02.11
Закрепление и привязка компонентов на форме