Форум: "Начинающим";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];
Внизосвобождение ресурсов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c