AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Function Result ist Klasse Wie freigeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Function Result ist Klasse Wie freigeben?

Ein Thema von Alexander Roth · begonnen am 14. Aug 2006 · letzter Beitrag vom 14. Aug 2006
 
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#3

Re: Function Result ist Klasse Wie freigeben?

  Alt 14. Aug 2006, 09:58
Zitat von Alexander Roth:
aber ich möchte wissen wie man es anders hinkriegt.
Was denn eigentlich?

Du hast unter "old" eine Stringliste. Deine erste Variante:
Zitat von Alexander Roth:
Delphi-Quellcode:
function a(old:Tstringlist):Tstringlist;
begin
  result:=Tstringlist.Create;
  result.Clear;
// result.Free;
end;
erzeugt eine neue Stringliste (diese ist per se leer); dann leerst Du sie und gibt sie als Ergebnis (result) zurück. "Dort" kann dann damit gearbeitet werden.

Zitat von Khabarakh:
Rückgabewerte einer Funktion muss der Aufrufer dieser Funktion freigeben.
Du musst sie also "irgendwo" selbst wieder freigeben, z.B.:
Delphi-Quellcode:
// irgendeine Prozedur
var sListeAlt: TStringList;
    sListeNeu: TStringList;
...
// sListeAlt muss bereits erzeugt sein
  sListeNeu := a(sListeAlt);
...
  sListeNeu.Free;
Zitat von Alexander Roth:
und wenn man es nicht created dann zeigt anscheinend result auf old.
Nein: Wenn der Befehl "result:=Tstringlist.Create;" nicht ausgeführt werden soll, zeigt Result "irgendwohin" und führt in "irgendeiner Prozedur" sehr schnell zu Zugriffsverletzungen.

Zitat von Alexander Roth:
Natürlich könnte ich das umgehen
Delphi-Quellcode:
procedure a(var new:Tstringlist; old:Tstringlist);
begin
  new.clear;
end;
Bei diesem Verfahren wird "new" geleert (natürlich auch mit Exception, wenn es nicht vorher erzeugt wurde) und sonst nichts - es gibt keinen Zusammenhang mit "old".

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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 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