![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
освобождение ресурсов [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) — совсем неправильный.