Ist es legal, den this-Pointer in einer Member-Funktion zu testen?

Ich habe eine Anwendung mit Objekten verschiedener Klassen. Die Objekte werden durch Zeiger referenziert. Ein Nullzeiger zeigt an, dass das zugehörige Objekt nicht vorhanden ist. Gegenwärtig sind die aufrufenden Codes umständlich, da jedes Mal, wenn ein Zeiger auf ein Objekt verwendet wird, der Zeigerwert auf null geprüft und eine geeignete Aktion ausgeführt wird, ist er null. Da die Standardaktion bei Nichtexistenz von der Art des Objekts abhängt, würde ich es vorziehen, sie in den Klassen für die Objekte selbst zu codieren und nicht im aufrufenden Programm. Daraus ergeben sich folgende Konstruktionen:

class C
{ ... 
  void member_func() //non-virtual !
  { if (this) { do something with the object ... }
    else { take some default action }
  }
  ...
};

Es ist klar, dass die Mitgliedsfunktion nicht virtuell sein kann, da die Nachschlagetabelle nicht vorhanden ist, wenn das Objekt nicht vorhanden ist, und der virtuelle Aufruf fehlschlagen würde. Aber ist dieser Code für nicht-virtuelle Member-Funktionen legal? Es scheint für die Compiler, auf denen ich es ausprobiert habe, korrekt zu funktionieren, aber ich mache mir Sorgen über mögliche Nichtportabilität. In der Norm kann ich keine Klausel finden, die solche Konstruktionen ausdrücklich erlaubt oder ausdrücklich verbietet.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage