Instanz einer Klasse übergeben...via Pointer, via Referenz
-
hi leute!
ich will ein objekt einer klasse einmal via pointer, einmal via referenz übergeben! ich wollte fragen ob ich das so richtig mache? im prinzip ist es ja egal ob ich die objekte am heap oder am stack anlege?Objekt an Klasse Foo2 übergeben via Pointer: --------------------------------------------- Foo1 *a = new Foo1(); // Pointer a zeigt auf die Instanz der Klasse Foo1 Foo2 *b = new Foo2(); // Pointer b zeigt auf die Instanz der Klasse Foo2 b->getInstance(a); class Foo2 { public: void geInstance(Foo1 *ptr_a) { ptr_Foo1 = ptr_a; } private: Foo1 *ptr_Foo1; // nun hab ich den pointer auf das objekt der klasse Foo1 }; Objekt an Klasse Foo2 übergeben via Referenz: --------------------------------------------- Foo1 *a = new Foo1(); // Instanz der Klasse Foo1 erzeugen Foo2 *b = new Foo2(); // Instanz der Klasse Foo2 erzeugen b->getInstance(*a); class Foo2 { public: void geInstance(Foo1 &ptr_a) { ptr_Foo1 = ptr_a; } private: Foo1 &ptr_Foo1; // nun hab ich die Referenz auf das objekt der klasse Foo1 }; ------------------------------ am schluss natürlich delete a; delete b;
wenn ich das objekt per value übergeben würde dann wird ja der Copy-Konstruktor aufgerufen? und man hat ne kopie des objektes...
cu
-
cplusplus. schrieb:
hi leute!
ich will ein objekt einer klasse einmal via pointer, einmal via referenz übergeben! ich wollte fragen ob ich das so richtig mache?Schick es doch mal durch den Compiler ... der wird dir schon sagen, ob es richtig oder falsch ist.
-
Die Übergabe an sich machst du richtig, die Klasse mit der Referenz wird aber trotzdem nicht funktionieren. Eine Referenz wird einmal an ein Objekt gebunden und kann dann nie mehr geändert werden. Sie verhält sich quasi, als sei sie das Objekt selbst.
Du willst sie aber später umbinden, wa aber nicht geht. Es ginge höchstens:lass Foo2 { public: void geInstance(Foo1 &ptr_a) { ptr_Foo1 = &ptr_a; // speichere die Adresse des Objekts } private: Foo1 *ptr_Foo1; // Zeiger!! };
-
cplusplus. schrieb:
void geInstance(Foo1 *ptr_a) { ptr_Foo1 = ptr_a; }
Mal abgesehen davon, dass du dich hier vertippt hast, aber sollte die Funktion nicht eher setInstance heissen? Scheint mir irgendwie passender.
-
warum sollte man später umbinden?? wüsste jetzt keinen grund!
cu
-
cplusplus schrieb:
warum sollte man später umbinden?? wüsste jetzt keinen grund!
Bist du der Originalposter? Wenn nicht, dann hast du das Problem nicht verstanden. Es kann durchaus Sinn machen, eine Verknüpfung zu einem Objekt zur Laufzeit zu ändern, und dann sind, wie Helium schon sagte, Referenzen ein ungeeignetes Mittel.