Zeiger vs. Referenz



  • ne Ref kann nie ungueltig sein !

    Doch. Ungültig schon, aber initialisiert werden muss die Ref. immer.
    Simon



  • Eine ref *darf* AFAIK nie ungültig sein, *kann* aber natürlich.



  • Referenzen sind aber auch eine schöne Coderegel, um Referenzen zu verlangen:

    class A
    {
       X &xref;
    };
    

    Der Compiler wird mir einen Error melden!

    Lässt sich lösen:

    class A
    {
       X &xref;
    
    public:
       A(X &x) : xref(x)
       {}
    };
    

    Alleine dadurch, das das Member eine Referenz ist, zwinge ich mich selber und auch Anwender meiner Klasse dazu, ein Objekt zu übergeben.

    Bei einem Pointer wird mir der Compiler keinen Error melden:

    class A
    {
       X *xref;
    };
    

    Ist ja nur "optional" zu initialisieren.



  • HansiHinterseher schrieb:

    Referenzen sind aber auch eine schöne Coderegel, um Referenzen zu verlangen:

    class A
    {
       X &xref;
    };
    

    Der Compiler wird mir einen Error melden!

    Lässt sich lösen:

    class A
    {
       X &xref;
    
    public:
       A(X &x) : xref(x)
       {}
    };
    

    Alleine dadurch, das das Member eine Referenz ist, zwinge ich mich selber und auch Anwender meiner Klasse dazu, ein Objekt zu übergeben.

    Bei einem Pointer wird mir der Compiler keinen Error melden:

    class A
    {
       X *xref;
    };
    

    Ist ja nur "optional" zu initialisieren.

    Häh? Wenn Du folgendes hast:

    struct A
    {
        A(const B& obj);
    };
    

    zwingst Du den Benutzer auch dazu, ein Objekt zu übergeben.
    Selbst

    struct A
    {
        A(B obj);
    };
    

    zwingt ihn dazu. Es darf nur keinen Default-Ctor geben. Die Referenz als Attribut ist überflüssig.



  • Tachyon, mit deinen beiden Versionen kannst du "xref" aber schlecht initialisieren. Bei der zweiten Version würde "xref", wenn du es mit "obj" initialisierst, auf einen Parameter zeigen, der direkt danach vom Stack ist, die Referenz also ungültig.



  • Badestrand schrieb:

    Tachyon, mit deinen beiden Versionen kannst du "xref" aber schlecht initialisieren. Bei der zweiten Version würde "xref", wenn du es mit "obj" initialisierst, auf einen Parameter zeigen, der direkt danach vom Stack ist, die Referenz also ungültig.

    Sein Post ging doch darum, die Übergabe eines Objekts zu erzwingen. Bei mir gibt es gar kein xref. Ist zum Erzwingen einer Objektübergabe auch nicht notwendig.
    Und der einleitende Satz: "Referenzen sind aber auch eine schöne Coderegel, um Referenzen zu verlangen" ist ohnehin selbstbestätigend.



  • Badestrand hat verstanden was ich sagen wollte. Dein Beispiel passt zu meinem garnicht. Wo ist denn deine Member-Referenz?



  • Wichtig sei vielleicht noch erwähnt, dass man Zeiger braucht, um in Listen einzufügen. Das funktioniert mit Referenzen nicht.


  • Mod

    drakon schrieb:

    Wichtig sei vielleicht noch erwähnt, dass man Zeiger braucht, um in Listen einzufügen. Das funktioniert mit Referenzen nicht.

    Die Wichtigkeit kann ich nicht erkennen, nicht einmal, was du eigentlich ausdrücken willst.



  • camper schrieb:

    drakon schrieb:

    Wichtig sei vielleicht noch erwähnt, dass man Zeiger braucht, um in Listen einzufügen. Das funktioniert mit Referenzen nicht.

    Die Wichtigkeit kann ich nicht erkennen, nicht einmal, was du eigentlich ausdrücken willst.

    Man könnte auf die Idee kommen eine Liste von Referenzen zu erstellen.


Anmelden zum Antworten