-> verstehen



  • hi

    wie kann man den -> verstehen? ich sehe ihn in jedem buch das ich gelesen hab. nur wie er funktioniert und wozu man in braucht weis ich ncht 🙄



  • pointer->methode ist das gleiche, wie (*pointer).methode die Antwort ist also, man braucht es nicht, man kann auch die zweite varianter verwenden, aber es ist schöner.



  • struct Foo
    {
      int bar;
    };
    // ...
    Foo* foo = new Foo;
    (*foo).bar = 3;
    // oder kürzer
    foo->bar = 3;
    

    das konstrukt "->" ist eine abkürzende schreibweise für dereferenzierung (*) und member zugriff (.)



  • Das was die Vorposter gesagt haben, ist soweit richtig. Man kann den aber auch mißbrauchen.
    Angenommen du hast eine Klasse die eine DXKlasse kapselt, als Bsp. DXINPUT8. Dann kannst du den direkten Zugriff auf dieses Interface mit -> erlauben:

    myClass
    {
    private:
       DXINPUT8 myDXINPUT;
    
    public:
      DXINPUT8* operator->() { return &myDXINPUT; }
    
    }
    

    Natürlich geht das nicht mehr afaik wenn du einen Zeiger auf myClass erstellst, weil dann der -> für eben den Memberzugriff reserviert ist, ausser du schreibst

    myClass *c = new myClass();
    *c->DXFunc(); // Bin mir nicht ganz sicher, sollte aber so immernoch gehen.
    

    Man macht das aber eh meistens mit Singletons. Hoffe ich hab dich jetzt nicht ganz verwirrt.
    rya.



  • was bringt aber

    Foo* foo = new Foo;
    

    eigentlich?

    also das new Foo?



  • Es wird ein Objekt vom Typ Foo im freien Speicher (Heap nennt man das nur in C) erzeugt.



  • ~john schrieb:

    Es wird ein Objekt vom Typ Foo im freien Speicher (Heap nennt man das nur in C) erzeugt.

    Das nennt man in jeder anderen Sprache auch Heap. 🙄



  • zeiger schrieb:

    was bringt aber

    Foo* foo = new Foo;
    

    eigentlich?

    also das new Foo?

    Es erzeugt ein neues Objekt auf dem Heap.
    Auf jedes new sollte ein delete (oder ein delete [] bei Arrays) folgen.

    Beispiel:

    Foo *bar = new Foo;
    delete foo;
    
    // Legt ein Array mit 200 Objekten an
    Foo *foobar = new Foo[200];
    delete [] foobar;
    


  • Man unterscheidet auch in C++ zwischen Stack und Heap 😉


Anmelden zum Antworten