Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

освобождение ресурсов [D7, XP]


aleko ©   (2007-01-24 22:28:00) 

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


var
Bmp: TBitmap;

...

  try

     Bmp := TBitmap.Create;

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

  finally

     Bmp.Free;

  end;

...


или так:


var
Bmp: TBitmap;

...

Bmp := TBitmap.Create;

  try

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

  finally

     Bmp.Free;

  end;

...


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


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

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


Джо   (2007-01-24 22:44:00) [2]

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

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


Loginov Dmitry   (2007-01-24 22:42:00) [3]

to aleko

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


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

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

Смотри.

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

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


TRUNK   (2007-01-24 22:36:00) [5]


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

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


Loginov Dmitry   (2007-01-24 22:34:00) [6]

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


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


Джо   (2007-01-24 22:32:00) [7]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо