LinuxForum.Fans
Тема

try-finally - освобождение ресурса (fpc/lazarus)

Автор: sunjob 3 сообщений 697 просмотров
19.04.2022 18:33 · отредактировано #437467

добрый день
разбираю чужой код, наткнулся на "его непонимание"

text

begin
var ResponceStream := PostRequest(UrlCtrl + '/api/hello', PostSource);
try
  // here void
finally
  ResponceStream.Free;
end;end;

задал вопрос автору:


смысл использовать т.о. try-finally?
если что-то случаться в процессе отправки запроса, то не произойдет "дефолтного" освобождения рессурса

получил ответ:


наоборот обязательно произойдет освобождение

поясните, почему? :о)

небольшая ремарка: данный код из Delphi-проекта, переношу на Lazarus

спасибо!

19.04.2022 19:08 #437468

sunjob, автор прав. Посмотрите документацию по Pascal. Смысл этой конструкции try - finally - end в том, чтобы операторы между finally и end были выполнены в любом случае.
Если ошибок при выполнении этого кода не возникает, он выполняется так, будто try, finally и end отсутствуют.
А если в блоке try - finally возникнет ошибка, выполнение этого блока прервётся и начнётся выполняться блок finally - end.
Вы не перепутали это с try - except - end? Блок except - end выполняется только в случае возникновения ошибки в try - except.

P.S. Немного отформатировал Ваш пример кода для лучшей читаемости.

20.04.2022 10:02 #437469

На Lazarus может не задействовать, поскольку там меньше сетевых компонентов.

Войдите или зарегистрируйтесь, чтобы ответить.