Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#36

Re: PosExUltra - Ultimative Stringsuche/Parser

  Alt 26. Feb 2010, 11:34
Um das noch weiter auszuführen: TStrings ist ja eine Klasse. Will man nun ein Objekt dieser Klasse in einer Funktion zurückgeben, muss sie auch innerhalb der Klasse Funktion instanziert werden. Da aber die Freigabe nicht innerhalb des Blocks (also der Funktion) erfolgen kann, in dem sie instanziert wurde (der Rückgabewert wäre ja sonst hinfällig), muss man sehr genau aufpassen, dass man sich kein Speicherleck einfängt. Aus genau diesem Grund gilt diese Vorgehensweise als unschön. Der einzige mir bekannte sinnvolle Einsatzzweck einer Funktion, die ein Objekt zurückgibt, ist der Getter einer Property. Es mag evtl. noch weitere geben, aber es fallen mir spontan keine ein. Zur angesprochenen Property aber noch schnell ein Beispiel:
Delphi-Quellcode:
type
  TMyClass = class
  private
    //privates Feld vom Typ der Klasse (initial nil)
    FStrings: TStrings;
    //Getter-Methode
    function GetStrings: TStrings;
  public
    //Property
    property Strings: TStrings read GetStrings;
  end;

...

function TMyClass.GetStrings: TStrings;
begin
  if not Assigned(FStrings) then
    FStrings := TStringlist.Create;
  Result := FStrings;
end;
Der Sinn einer solchen Vorgehensweise liegt darin, Objekte erst dann zu erzeugen, wenn diese auch wirklich gebraucht werden, im obigen Beispiel also beim ersten Zugriff auf die Property.

[edit] Blödsinn korrigiert (s.o.) [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat