Ist 0->methode() schon illegal?
-
Oder erst, wenn man auf Member zugreift?
bool Unit::DEBUG_isInvariant() const { if( this == NULL ) return false;
-
Ist schon beim Aufruf illegal. Ein Aufruf setzt eine Dereferenzierung des Zeigers voraus, und der muss dann auf etwas zeigen.
-
Optimizer schrieb:
Oder erst, wenn man auf Member zugreift?
bool Unit::DEBUG_isInvariant() const { if( this == NULL ) return false;
Das sollte eigentlich zu einem undefinierten Verhalten führen, denn wenn das Objekt nicht existiert, kann der this-Zeiger auch nicht existieren. In etwa mit folgendem Stück Code vergleichbar:
int** a = 0; if (*a) // whoops //...
Manche Compiler unterstützen sowas sicherlich, wie der VC...
-
Naja, zum unterstützen gibt's da IMHO nichts, weil der this-Zeiger ist einfach nur ein Parameter, der halt den Wert NULL hat. Mich hätte nur interressiert, was der Standard dazu sagt.
-
Optimizer schrieb:
Naja, zum unterstützen gibt's da IMHO nichts, weil der this-Zeiger ist einfach nur ein Parameter, der halt den Wert NULL hat. Mich hätte nur interressiert, was der Standard dazu sagt.
a->b()
ist das selbe wie
(*a).b()das müsste antwort genug sein, oder?
es wird aber mit großer wahrscheinlichkeit trotzdem laufen - weil der compiler ja keinen grund hat hier wirklich zu dereferenzieren.
UB müsste es trotzdem sein.
-
Vor nicht all zu langer Zeit war mal ein Topic über solch eine Konstruktion:
if( this == NULL ) return false;
In der MFC in diesem Forum. War 2 oder 3 Seiten lang.
-
Naja, lass ma des mal bleiben, ich bin eh nicht darauf angewiesen.
-
Irgendwer schrieb:
Vor nicht all zu langer Zeit war mal ein Topic über solch eine Konstruktion:
if( this == NULL ) return false;
In der MFC in diesem Forum. War 2 oder 3 Seiten lang.
http://www.c-plusplus.net/forum/viewtopic.php?t=78632&postdays=0&postorder=asc&start=0