Delphi-Quellcode:
function UnsichereMethode: TStringList;
begin
Result := TStringlist.Create;
Result.Add('
Eins');
raise Exception.Create('
Ein Test.');
Result.Add('
Zwei');
end;
function SichereMethode: TStringList;
begin
Result := TStringlist.Create;
try
Result.Add('
Eins');
raise Exception.Create('
Ein Test.');
Result.Add('
Zwei');
except
Result.Free;
raise;
end;
end;
procedure TueEtwas;
var
LList: TStringList;
begin
LList := SichereMethode;
try
// Tue etwas mit LList
finally
LList.Free;
end;
end;
Würdest du nun in
TueEtwas anstatt
SichereMethode die Funktion
UnsichereMethode aufrufen, würde ein Speicherleck entstehen, da du das
LList.Free in
TueEtwas nie erreichst. Darum ist in
SichereMethode der Try-except-Block, um im Fehlerfall die Liste freizugeben und somit ein Speicherleck zu verhindern.