![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
try..except
ldv © (2011-04-22 11:43:00)
function TMainForm.init_data(Data: Pointer;
Size: Cardinal): Bool;
begin
Flinked_data := TMemoryStreamEx.Create(Data, Size);
try
FLinker := TLinker.Create;
try
Result := FLinker.SetStaticFromMemory(Flinked_data.Memory, Flinked_data.Size,
False);
except
FreeAndNil(FLinker);
raise;
end;
except
FreeAndNil(Flinked_data);
raise;
end;
end;
есть подозрение, что неправильно использую try..except. Может правильнее сделать один общий try..except для Flinked_data и FLinker?
Игорь Шевченко (2011-04-22 15:24:00) [1]
> есть подозрение
подозрение укрепилось
И. Павел (2011-04-22 13:24:00) [2]А я в таких ситуациях делаю так:
Flinked_data := nil;
FLinker := nil;
try
Flinked_data := TMemoryStreamEx.Create(Data, Size);
FLinker := TLinker.Create;
...
except
FreeAndNil(Flinked_data);
FreeAndNil(FLinker);
raise;
end;
LDV (2011-04-22 12:05:00) [3]
> Лучше сделай для них var...
объект FLinker напрямую привязан к стриму (пока стрим открыт можем работать с его содержимым через FLinker), FLinker будет использоваться несколькими методами класса-формы, поэтому сделать их локальными не получится.
_oxffff (2011-04-22 11:56:00) [4]
> есть подозрение, что неправильно использую try..except.
Все зависит от постановки задачи.
oldman (2011-04-22 11:52:00) [5]
> Может правильнее сделать один общий try..except для Flinked_data
> и FLinker?
Не...
Лучше сделай для них var...