Konstruktur mir this pointer



  • Hallo,
    ich bin gerade beim Lesen darauf gestoßen:

    Buch(const char* titel="", const char* autor="", unsigned int seiten=0) {
        ...
        strncpy( this->titel, titel, 50 );
        ...
    }
    

    Das

    this->titel
    

    wird ja hier anscheinend verwendet, weil die Konstruktor Parameter die gleichen Namen haben, wie die Elemente. Hat diese Variante sonst noch irgendwelche Vorteile?



  • Nö.
    Mit this greifst du explizit auf das aktuelle Objekt zu.



  • Ok also wars wirklich nur wegen der Namensüberdeckung.



  • Gibt es einen bestimmten Grund, wieso du mit char* rumfrickelst? Spricht irgendetwas gegen std::string ?

    bb



  • Abgesehen davon, dass ich lieber std::string nehmen würde...

    Es gibt noch einen Fall, in dem this-> sehr praktisch ist. Der tritt aber höchst selten auf -- jedenfalls bei mir:

    class foo {
    public:
      int z;
    };
    
    template<typename Base>
    class bar : public Base {
    public:
      int get() const {
        return this->z; // Hier ist this-> notwendig,
        // da sonst der Compiler beim ersten Durchgang
        // nichts mit z anfangen kann und meckert.
        // Durch das this-> wird das Nachgucken von z
        // verzögert, bis das Template instanziert wird.
      }
    };
    

    Ich weiß das auch nur, weil ich den Fall schon mal hatte und mein Compiler (g++) da recht pingelig war und ordnungsgemäß das Zwei-Phasen-Lookup durchgeführte.

    Gruß,
    SP



  • 👍
    Super Beispiel.
    Gestern war so eine Ähnliche Frage und ich wusste, dass es Fälle (abgesehen von Namenkonflikten) wo this wirklich Sinn macht, aber mir ist nichts eingefallen. 😉
    (Ich habe afaik auch mal was anderes gesehen, aber ich kann überhaupt nicht mehr sagen wo das war).



  • Sebastian Pizer schrieb:

    Es gibt noch einen Fall, in dem this-> sehr praktisch ist.

    Hier wäre Base::z absolut äquivalent, oder?

    drakon schrieb:

    Gestern war so eine Ähnliche Frage und ich wusste, dass es Fälle (abgesehen von Namenkonflikten) wo this wirklich Sinn macht, aber mir ist nichts eingefallen. ;).

    Das Schlüsselwort this an sich macht natürlich Sinn, wenn Zeiger oder Referenzen auf das eigene Objekt benötigt werden.



  • Nexus schrieb:

    drakon schrieb:

    Gestern war so eine Ähnliche Frage und ich wusste, dass es Fälle (abgesehen von Namenkonflikten) wo this wirklich Sinn macht, aber mir ist nichts eingefallen. ;).

    Das Schlüsselwort this an sich macht natürlich Sinn, wenn Zeiger oder Referenzen auf das eigene Objekt benötigt werden.

    Jaja, aber ich dachte ich hätte mal was sehr spezielles gesehen.. :S
    Eher so etwas, wie Sebastians Beispiel.



  • Mit ((&this)+1) kann man auf den ersten Parameter zugreifen... Aber unschön. 😉

    EDIT: oder auch nicht... irgendwas war da... *nachguck*
    EDIT2: Ah, anders herum. Über den ersten Parameter kann man auf this zurückgreifen. 😉



  • Ah, anders herum. Über den ersten Parameter kann man auf this zurückgreifen.

    Compilerabhängig afaik

    VC++ gibt den Objektzeiger immer als erstes Argument mit, GCC kopiert ihn jediglich nach ECX.


Anmelden zum Antworten