this-Pointer in Initialisierungsliste?
-
Warum meckert MSVC Toolkit hier:
class c1 { protected: c1* thisptr; public: c1 (void) : thisptr (this) { } };
MSVC gibt (im Gegensatz zu BCC und gcc) eine Warnung wegen this-Pointer in der Konstruktorliste aus. Darf man das denn nicht machen (funktionieren tut es jedenfalls
)?
Ich weiß, daß das Beispiel sinnlos ist, aber ich hab das schonmal woanders gebraucht.
Moritz
-
Hallo,
die Verwendung von this in der Initialisierungsliste ist potentiell gefährlich, da this zu diesem Zeitpunkt noch nicht dereferenziert werden darf (da das Objekt noch nicht konstruiiert ist). Der VC weißt mit seiner Warnung auf diese potentielle Gefahr hin.Darf man das denn nicht machen
Solange du den Zeiger nur speicherst und erst dereferenzierst, nach dem der Ctor vollständig abgelaufen ist, ist das Ganze kein Problem.
-
Hi,
aber mal ne Frage, wozu in der Klasse den this speichern, wenn er eh jederzeit verfügbar ist?
grüße, Con@n
-
Con@n schrieb:
Hi,
aber mal ne Frage, wozu in der Klasse den this speichern, wenn er eh jederzeit verfügbar ist?
grüße, Con@n
a) weil es geht
b) weil man wissen will, ob es geht
c) weil ein objekt in der klasse vielleicht den this zeiger braucht(hier konstruierten fall einfügen)
-
a) weil es geht
b) weil man wissen will, ob es geht
c) weil ein objekt in der klasse vielleicht den this zeiger braucht(hier konstruierten fall einfügen)
-
Redhead schrieb:
c) weil ein objekt in der klasse vielleicht den this zeiger braucht(hier konstruierten fall einfügen)
Beispiel GUI:
ein Window hat Komponenten, wird also per Layering implementiert. Ein Child braucht aber eine referenz auf das Parent, nun will man das ganze nicht dynamisch in der 'InitComponents()' Funktion instanziieren sondern gleich im Ctor des Windows. AlsoWindow::Window() : button(this, "Ich bin ein Button"), label(this, "cooler Text") {}
-
Shade Of Mine schrieb:
Window::Window() : button(this, "Ich bin ein Button"), label(this, "cooler Text") {}
Ja, so ähnlich wars (ich hab den Pointer für eine selbstkonstruierte Klasse gebraucht, die Elemente ihrer Besitzerklasse ansprechen wollte).
Weiß denn nun jemand, warum MSVC sich da beschwert (auch schon in der Version 6)?
-
Schon Humes Post gelesen?
(Lässt sich einfach finden, gleich die erste Antwort)
-
finix schrieb:
Schon Humes Post gelesen?
(Lässt sich einfach finden, gleich die erste Antwort)Ohh, mal wieder nicht genau hingeschaut
Danke!