Czy jest to zgodne z prawem C ++, aby przetestować ten wskaźnik w funkcji składowej?

Mam aplikację obejmującą obiekty różnych typów klas. Do obiektów odwołują się wskaźniki. Wskaźnik zerowy oznacza, że ​​powiązany obiekt nie istnieje. Obecnie kody wywołujące są kłopotliwe, ponieważ za każdym razem, gdy używają wskaźnika do obiektu, testują wartość wskaźnika dla wartości null i podejmują odpowiednie działania, które są zerowe. Ponieważ domyślna akcja podejmowana w przypadku nieistnienia zależy od typu obiektu, wolałbym kodować go w klasach dla samych obiektów, a nie w programie wywołującym. Powoduje to konstrukcje takie jak:

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

Oczywiście funkcja składowa nie może być wirtualna, ponieważ tabela odnośników nie istnieje, gdy obiekt nie istnieje, a wywołanie wirtualne nie powiedzie się. Ale czy ten kod jest legalny C ++ dla nie-wirtualnych funkcji członkowskich? Wydaje się, że działa poprawnie dla kompilatorów, na których próbowałem, ale obawiam się, że nie będzie to możliwe. W standardzie nie mogę znaleźć klauzuli, która wyraźnie zezwala lub wyraźnie zabrania takich konstrukcji.

questionAnswers(5)

yourAnswerToTheQuestion