Wie genau geht call by reference mit dem BCB
-
Hi,
nach meiner Überlegung mit globalen Variablen zu arbeiten, habe ich mich entschieden lokal zu arbeiten und dann call by reference zu nehmen.
Leider weiß ich nicht genau wie es geht. Habe verschiedenes ausprobiert und es hat auch kompiliert, aber wenn ich es mache, dann soll es auch richtig sein.
Hier mal einige Zeilen Code:
// dieses object wird lokal erzeugt TStringList *list = new TStringlist(); // füge elemente hinzu addelements(list); // so die funktion void __fastcall TForm1::addelements(TStringList *list) { list->Add("test"); } // in der header steht dann unter public void __fastcall addelements(TStringList *list)Ist dieses Beispiel so richtig, dass ich einfach die Adresse meiner Stringlist an die FUnktion addelements übergebe und diese dann den Wert hinzufügt und der Wert dann auch korrekt anschließend in der Stringlist drinnen ist?
Maike
-
Hallo
ja das ist richtig.
Denk dran das du die Liste nach Gebrauch auch wieder löschen solltest.bis bald
akari
-
Hi,
danke für die Bestätigung. Löschen geht klar. Ich meine mich an früher noch zuerinnern, dass bei call by reference immer der & operator mit ins spiel kam, wo dann eine referenz übergeben wird. Dies ist dann wohl nur bei statischen Objekte?
Maike
-
Maike7 schrieb:
danke für die Bestätigung. Löschen geht klar. Ich meine mich an früher noch zuerinnern, dass bei call by reference immer der & operator mit ins spiel kam, wo dann eine referenz übergeben wird. Dies ist dann wohl nur bei statischen Objekte?
Nein, du kannst den Parameter in diesem Beispiel natürlich auch als Referenz übergeben, allerdings erleichtert das die Parameterübergabe nicht. Technisch gesehen sind Referenzen nichts anderes als konstante Zeiger, die implizit dereferenziert werden und auf deren Adresse kein (direkter) Zugriff besteht.
Mit Referenzschreibweise sähe dein Beispiel so aus:// Deklaration: class TForm1 ... { ... void __fastcall addelements (TStringList& list); ... }; // Implementation: void __fastcall TForm1::addelements (TStringList& list) { list.Add ("test"); } // Verwendung: TStringList* list = new TStringlist; addelements (*list); delete list; // hinterher wieder aufräumen