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.