Einzelnen Beitrag anzeigen

Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#17

AW: TStringList freigeben?

  Alt 22. Dez 2010, 18:47
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.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat