Unterschiede zwischen Referenz und Pointer ?!?!
-
Hallo zusammen,
was für einen Unterschied macht es eigentlich, ob ich einen Pointer zurückgebe oder eine Referenz ? Gibt es da überhaupt einen ? Wenn ich einen Pointer zurückgebe muß ich weiter mit dem ->Operator arbeiten und bei der Refernz mit dem .Operator, oder ? Gibt es denn sonst noch irgendwelche anderen interessanten oder wichtigen Anmerkungen dazu ?
Es geht nämlich darum, dass ich mir ein Objekt einer Liste zurückgeben lassen will von einer Methode, nur ist die Frage wie ? Wenn ich es als Pointer zurückgeben lasse würde das dann doch so in etwa aussehen :Objekt* Liste::GibObjekt(void); Objekt* ptrObjekt = NULL; ptrObjekt = Liste.GibObjekt();
doch wie würde das per Referenz aussehen und was würde sich dabei ändern ?
Objekt& Liste::GibObjekt(void); // und jetzt???
Vielen Dank
-
1. unterschiedliche Syntax, die dazu führt, dass Referenzen nur initialisiert und später nicht mehr geändert werden können
2. es gibt keine Nullreferenz, Nullpointer dagegen schon.
-
Original erstellt von Bashar:
2. es gibt keine Nullreferenz, Nullpointer dagegen schon.kann man aber hintricksen
-
sollte man aber nicht...
dein code müsste so aussehen:Objekt &referenz = liste.GibObjekt(); //einfach statt * ein &
achja, weil es keine nullreferenzen gibt (bzw. geben sollte) wird auch bei dynamic_cast mit referenzen eine exception geworfen, wenn etwas nicht klappt
edit: vielleicht ist weil das falsche wort
[ Dieser Beitrag wurde am 23.05.2003 um 13:53 Uhr von davie editiert. ]
-
Original erstellt von davie:
sollte man aber nicht...warum nicht? Ich stell mir sowas in der Art vor:
class Foo { private: static const Foo& null_object; public: static Foo& null() { return s_null; } // ... }; Foo& Foo::null_object; // ... void foo(Foo& f) { if (f != Foo::null()) // ... }
-
gerade das sollte eben unnötig sein - nicht mal in debugging code.
außer du meinst mit dem null objekt was anderes als ein herum ge-c-casteter 0 zeiger
-
Original erstellt von davie:
gerade das sollte eben unnötig sein - nicht mal in debugging code.???
**
außer du meinst mit dem null objekt was anderes als ein herum ge-c-casteter 0 zeiger**Erkennt man nicht im Code was ich meine? Einen Nullpointer als Nullreferenz zu verwenden geht natürlich nicht, dazu müsste ich ja an irgendeiner Stelle den Nullpointer dereferenzieren und UB heraufbeschwören.
-
doch man erkennt es nur ist mir das zu spät gekommen... deshalb ist der gedanke etwas wirr mit dem c casten verbunden
denn unter "kann man sich aber hintricksen" hab ich "herbeiführen von UV" ver