![]() |
konstanter Rückgabewert bei Funktionen?
Hallo!
ist es denn möglich einer Funktion einen konstanten Rückgabewert zu geben? Zb wenn ich ein Element meiner Listeklasse will, soll er ja keine neue Instanz zurückgeben sondern quasi den Zeiger. mfG |
Re: konstanter Rückgabewert bei Funktionen?
Ich würde sagen, dass die Rückgabe normalerweise immer ein Zeiger auf die bestehende Instanz ist. Eine NEUE Instanz müsstest du doch selbst in der Funktion erzeugen.
|
Re: konstanter Rückgabewert bei Funktionen?
Es wird ja keine Instanz, sondern eine Referenz(Zeiger) auf sie zurückgegeben. Aber was meinst du mit Konstante? Skizziere dein Vorhaben einmal etwas genauer ( Code)
|
Re: konstanter Rückgabewert bei Funktionen?
Ich mutmaße mal:
Delphi-Quellcode:
Ich könnte mir vorstellen, dass etwas in der Art gemeint ist.
type
TMyClass = class private MyList: TObjectList; function GetFirstElement: TObject; public property FirstElement: TObject read GetFirstElement; ... function TMyClass.GetFirstElement: TObject; begin if MyList.Count > 0 then Result := MyList[0] else Result := nil; end; |
Re: konstanter Rückgabewert bei Funktionen?
Was du meinst, ist nicht "konstant". Was du meinst, ist Referenz statt Wert. Wenn dein Listenelement ein Array, Record, String oder Objekt ist, wird immer die Referenz zurückgegeben, wobei es bei Arrays, Strings und ich glaube auch Records ein paar komplizierte Regeln gibt, die ich mir nie merken kann, dass manche davon "Copy on write" haben, also es wird zwar nur die Referenz übergeben, aber sobald man dann versucht, darauf zu schreiben, wird es kopiert, sodass das Original unverändert bleibt.
Wenn du also nur die Referenz zurückgeben willst, musst du gar nichts machen, (außer bei primitiven Typen wie Integern, da geht das gar nicht, ohne einen Record oder eine Klasse drumrumzuwrappen), wenn du eine Kopie zurückgeben willst, schon. |
Re: konstanter Rückgabewert bei Funktionen?
ach okey danke euch. nun alles klar.
ich ging von c++ aus >
Code:
dachte man müsse/könne es in Delphi auch so machen aber wenns automatisch geht, isse ja wunderbar :)class ctest { public: tlist item; const tlistelement &getItemAt( int idx ); } |
Re: konstanter Rückgabewert bei Funktionen?
Zitat:
wenn du sichergehen willst, dass der Compiler von sich keine Kopierfunktionen einfügt, dann kannst du ja als Rückgabe einen Pointer definieren, also PObject statt TObject. U.U. musst du das noch selbst definieren, und nach den gültigen Delphi-Regeln ist PObject dasselbe wie TObject, aber für den Compiler ist es eben ein Pointer und er unternimmt nichts weiter. Die Weiterverarbeitung ist etwas komplizierter, aber im Notfall hilft ein Typecast. Gruss Reinhard |
Re: konstanter Rückgabewert bei Funktionen?
Oh nein, das ist eine ganz schlechte Idee. Wenn du ein Objekt AObj hast und dann @AObj zurückgibst, bekommst du wahrscheinlich Mist raus.
Bei Records ist das schon eher sinnvoll, aber bei Arrays und Strings nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 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