Announcement

Collapse
No announcement yet.

Rückgabewert einer Function

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rückgabewert einer Function

    Hallo,

    wenn ich eine TStringList als Rückgabewert einer Function haben will, gehe ich so vor:
    function...: TStringList;
    ..
    Result := TStringList.Create;
    ..

    Kann / Darf man das so machen? Was passiert mit der StringList, nachdem die Prozedur abgelaufen ist, ich kann sie ja nicht mehr freigeben, oder?

    Danke

    Tobias

  • #2
    Hallo Tobias,<br>klar kann und darf man das so machen. Du muß nur darauf achten, dass das TStringlist Objekt wieder freigegeben wird.<br>

    <pre>

    var
    L : TStringList;

    funtion CreateStringList : TStringlist;
    begin
    Result:=TStringList.Create;
    end;

    ...
    L:=CreateStringList;
    ...
    Mach was mit L
    ...
    L.Free;

    </pre>

    <br>
    :-) Jens Schuman

    Comment


    • #3
      Hi

      Ich stimme Jens zu. Es zeugt aber von einem "guten Ton" der Programmierung es anders zu machen:

      <pre>

      procedure FülleStrings(Strings: TStrings);
      begin
      Strings.Add(XYZ);
      ... usw.
      end;

      begin
      L := TStringList.Create;
      try
      FülleStrings(L);
      finally
      L.Free;
      end;
      end;

      </pre>

      Obiges Beispiel demonstriert das Grundprinzip:
      Der Aufrufer einer Funktion ist selber verantwortlich für die Erzeigung UND Freigabe von Resourcen (also auch String-Listen).
      Resourcen die Bestandteil eines Objektes sind (z.B. TForm), sollten
      diese auch verwalten (erzeugen und zerstören). Das Objekt wird also zum Besitzer dieser Resourcen.

      Hält man sich daran (Borland tut dies :-) stellt sich Deine Frage erst gar nicht :-)

      Gruß Hage

      Comment


      • #4
        Danke Hagen!
        hat gerade auch mir sehr geholfen!

        Gruß

        Marku
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment

        Working...
        X