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


Anmelden zum Antworten