Frage: Methode Rückgabewert als Referenz oder Pointer??
-
Folgende Konstellation:
class dummy{ Foo[2]; Foo& Get(i); //oder Foo* Get(i); }; Foo* Get(int i){ return &(Foo[i]); } //oder Foo& Get(int i){ return Foo[i] }wenn ich nun irgendwo im Code aurufe:
Foo o= Get(0); o.xxx... o= Get(1); o.xxx...ist das dann equvalent zu:
Foo *p= Get(0); p->xxx... p= Get(1); p->xxx...
-
Ich würde nur dann Zeiger verwenden, wenn ich auch vorhabe, NULL-Werte zurückzugeben. Ansonsten nimm lieber Referenzen.
PS: Übrigens kannst du auch
d.Get(0).xxx...schreiben, um direkt auf die zurückgegebenen Array-Elemente zuzugreifen
-
CStoll schrieb:
PS: Übrigens kannst du auch
d.Get(0).xxx...schreiben, um direkt auf die zurückgegebenen Array-Elemente zuzugreifen
Ja, macht der COde ja aber gerade *nicht*. 'Foo o = Get(0)' legt eine Kopie an.
-
Wollte ich auch gerade einwenden. Demnach ist natürlich erst folgendes "equvalent":
Foo *p= Get(0); p->xxx... // äquivalent zu Foo& o = Get(0); o.xxx... // Und folgendes ist nicht möglich, daher auch nicht äquivalent zu irgendwas o = Get(1);
-
was passiert wenn ich dies machen mit "o"? :
Foo& o = Get(0); o.xxx... // Und folgendes ist nicht möglich, daher auch nicht äquivalent zu irgendwas o = Get(1);wir hier nich die o referenz überschrieben?
-
Nein, hier wird der operator= von dem Objekt, auf das o verweist (also Element 0) mit dem Objekt rechts vom = als Argument (also Element 1) aufgerufen. Du würdest also Element 1 auf Element 0 kopieren. Um das nochmal "equvalent" darzustellen:
Foo& o = Get(0); o.xxx... o = Get(1); // ist äquivalent zu o.operator=(Get(1)); // folglich äquivalent zu Get(0) = Get(1);
-
Foo& o = Get(0); o.xxx...;o ist eine Referenz auf das erste Array-Element - und die Auswirkungen von xxx machen sich damit auf das Element bemerkbar.
o = Get(1);Im Gegensatz zu deiner Zeiger-Lösung verbiegt das nicht die Referenz (Referenzen verweisen während ihrer kompletten Lebensdauer auf das selbe Objekt), sondern weist dem Objekt hinter o den Inhalt von Get(1) zu - d.h. du überschriebst das erste Array-Element mit dem Inhalt des zweiten.
-
ok perfekt.. genau das hat mich dieganze zeit verwirrt;) Danke .. habs verstanden..;)
