![]() |
Function Result ist Klasse Wie freigeben?
Hi @all,
also ich habe so was:
Delphi-Quellcode:
Also ich weis nicht wie ich das wieder freigeben soll. (oder wird das vielleicht sogar automatisch freigegeben?)
function a(old:Tstringlist):Tstringlist;
begin result:=Tstringlist.Create; result.Clear; // result.Free; end; und wenn man es nicht created dann zeigt anscheinend result auf old. Natürlich könnte ich das umgehen
Delphi-Quellcode:
aber ich möchte wissen wie man es anders hinkriegt.
procedure a(var new:Tstringlist; old:Tstringlist);
begin new.clear; end; Wisst ihr wie? Danke im Voraus |
Re: Function Result ist Klasse Wie freigeben?
Rückgabewerte einer Funktion muss der Aufrufer dieser Funktion freigeben.
|
Re: Function Result ist Klasse Wie freigeben?
Zitat:
Du hast unter "old" eine Stringliste. Deine erste Variante: Zitat:
Zitat:
Delphi-Quellcode:
// irgendeine Prozedur
var sListeAlt: TStringList; sListeNeu: TStringList; ... // sListeAlt muss bereits erzeugt sein sListeNeu := a(sListeAlt); ... sListeNeu.Free; Zitat:
Zitat:
Nebenbei: Eine Stringliste muss nicht als "var" deklariert werden; man kann sie auch als "const" manipulieren. (Ich weiß nicht genau warum; vielleicht unterscheiden sich da auch Delphi-Versionen.) Also meine Hauptfrage bleibt: Was willst Du eigentlich? Jürgen |
Re: Function Result ist Klasse Wie freigeben?
Zitat:
Zitat:
Danke für eure Hilfe. Tschüss :hi: Gruß Alexander |
Re: Function Result ist Klasse Wie freigeben?
Hallo,
Zitat:
Aber zurück zum Topic: Grundsätzlich gibt es immer zwei Varianten: Entweder ein Objekt als Argument übergeben (nicht als var) oder als Result erhalten. In beiden Fällen ist aber die aufrufende Funktion dafür verantwortlich, dass das Objekt am Ende freigegeben wird. Der einzige Unterschied besteht hier in der Lesbarkeit. Denn bei der Variante "Argument" muss ich das Objekt vorher selbst anlegen und weiß damit auch, dass ich es selbst zerstören muss. Bei der anderen Variante muss ich das zwar auch, aber es ist nicht offensichtlich. Außerdem kann ich mir bei einer Blackbox (was eine Funktion möglichst sein sollte) eben nicht sicher sein, ob ich nicht nur eine Referenz auf ein internes Objekt erhalte. Das darf ich dann nämlich nicht freigeben. Die oben angesprochene Variante mit var, bei der das Objekt in dern Funktion erzeugt wird, ist nichts anderes als eine Variante von "Result". Gruß xaromz |
Re: Function Result ist Klasse Wie freigeben?
Zitat:
Zitat:
Persönlich nutze ich dabei folgende Namensgebung: Eine Funktion die "function CreateNamenList: TStrings" heißte erzeugt die Liste und der Aufrufer muss für deren Freigabe sorgen. Heißt sie hingegen "function GetNamenList: TStrings" ist klar, dass der Aufrufer sich um das Freigeben keine Sorgen machen muss. |
Re: Function Result ist Klasse Wie freigeben?
Hallo,
Zitat:
Zitat:
Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz