this == NULL
-
Hallo,
mehrere in MFC-Klassen gekapselte Methoden haben Abfragen der Art
if (this == NULL) ...man findet diese Abfragen hauptsächlich (oder sogar nur?) in operator-Methoden oder Funktionen der Art GetSafe???.
Meine Frage:
Wann kann der this-Zeiger denn eigentlich NULL sein?
-
((CKlasse*)(NULL))->Metthode();
-
AFAIK sind ja auch Dinge erlaubt wie
class MySmartPtr { private: unsigned refcnt; public: ... void removeRef (void) { if (--ref == 0) delete this; } };Vielleicht ergibt die Prüfung von this in diesem Zusammenhang Sinn. Ob jedoch grundsätzlich der Aufruf nichtvirtueller Methoden mit ungültigem this-Zeiger erlaubt ist, weiß ich nicht - diese Freiheit wird sich Microsoft wohl einfach genommen haben.
-
audacia schrieb:
delete this;Damit wird this aber nicht zu NULL und
this = NULL;ist auch nicht ohne Schummelei möglich.
-
_interest schrieb:
mehrere in MFC-Klassen gekapselte Methoden haben Abfragen der Art
if (this == NULL)Beispiele! Ich habe keine gefunden...
-
GetSafeHwnd() macht das z.B.!
Dito in den Gdi Objekt Klassen.Der Vorteil liegt auf der Hand. Auch für einen CWnd* NULL Zeiger liefert pWnd->GetSafeHwnd() immer NULL ohne zu crashen!
-
Achso, somit werden also bequeme quick-n-dirty-Lösungen wie
m_pMyWnd->GetParent ()->GetSafeHandle ()etc. möglich.
Cool!
-
Das funktioniert nur wenn m_pMyWnd gültig ist.
GetSafeHabdle ist IMHO keine CWnd Methode!