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->titelwird 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::zabsolut ä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
thisan 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
thisan 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.