Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: TStringList freigeben?

  Alt 23. Dez 2010, 12:42
Moin Mysterio,

Generell weiß ich natürlich, wie man Objekte erstellt und wieder freigibt. Nur nicht, wenn der Rückgabewert ein Objekt, wie z.B. TStringList, ist.
Genau deshalb sollte man es vermeiden ein Objekt als Rückgabewert einer Funktion zu verwenden.
Es wird zu unübersichtlich. Man kann sich dabei zu leicht Speicherlecks, oder Exceptions auf Grund an falscher Stelle freigegebener Objekte einhandeln.

Eine Ausnahme fällt mir dazu aber auch noch ein:
Wenn es sich um eine Methode einer Klasse handelt, die die zurückgegebenen Objekte selber verwaltet, z. B. TListView.
TListView verwaltet die Items selber, so dass TListItem als Rückgabewert von TListView.Items.Add kein Problem darstellt.

Delphi-Quellcode:
function funktion: TStrings;
begin
  Result := TStringlist.Create;
  try
    Result.Add('Eins');
    Result.Add('Zwei');
  except
    FreeAndNil(Result);
    raise;
  end;
end;
Oder habe ich noch nicht richtig verstanden, was "raise" macht?
Raise ruft die Exception auf Grund derer in den except-Zweig verzweigt wurde noch einmal auf.
Erst wird die Exception abgefangen (try/except), dann das Objekt freigegeben (FreeAndNil(Result)) und dann der Grund für den Fehler erneut angezeigt (raise).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat