Objectpascal mit FPC, Funktion erstell t Objekt und gibt dieses zurück
Von: Michael Fuchs (mikescu@gmx.de) [Profil]
Datum: 05.08.2008 12:44
Message-ID: <6fqp9aFct96cU1@mid.individual.net>
Newsgroup: de.comp.lang.pascal
Datum: 05.08.2008 12:44
Message-ID: <6fqp9aFct96cU1@mid.individual.net>
Newsgroup: de.comp.lang.pascal
Hallo, ich überlege gerade, welches die beste Methode ist Objekte aus Prozeduren/Funktionen zurückzugeben. Passieren soll folgendes: Eine Funktion/Prozedur liest einen Datensatz aus einer Datenbank und mappt die Daten in ein Objekt welches sie zurückgibt. Zwei mögliche Lösungsansätze habe ich dafür: type TMyObject = class private _a: Integer; public property A: Integer read _a write _a; end; function GetObject: TMyObject; var resultObject: TMyObject; begin resultObject:= TMyObject.Create; // Quellcode der das Objekt mit Daten füllt Result:= resultObject; end; procedure GetObject(resultObject: TMyObject); begin // Quellcode der das Objekt mit Daten füllt end; Die Funktion erstellt das Objekt und gibt es als Rückgabewert nach außen. Wäre meine bevorzugte Lösung, dann kann ich auch falls ein Datensatz gefunden wurde auch einfach nil zurückgeben. Wichtig ist dann bloss, dass der Quellcode, der die Funktion aufruft, das Objekt auch wieder freigibt wenn er fertig ist. Auch kein Problem, es seid denn, dass es da irgendwelche Einschränkungen gibt, weil dieses Objekt ja in der Funktion erzeugt wurde. Ist dem so? Alternativ müsste ich dann die Variante mit der Prozedur wählen. Also Objekt erzeugen, als Parameter an die Prozedure und die füllt das Ding dann nur noch mit Daten. Aber was mache ich dann, wenn ich später mal eine Liste zurückgeben muss, dann muss ich die Objekte wieder innerhalb der Funktion erzeugen. Gefällt mir nicht so recht. Spricht etwas gegen die Variante 'Funktion erzeugt Objekt, gibt es nach außen und der "äußere" Code kümmert sich um das Vernichten'? mfg Micha -- Meine Wanderungen durch Realität und Cyberspace auf --> http://www.michael-fuchs.net <--[ Auf dieses Posting antworten ]
Antworten
- Vinzent Hoefler (05.08.2008 13:52)
- Michael Fuchs (05.08.2008 22:59)
- Vinzent Hoefler (06.08.2008 18:56)
