¿Es legal C ++ probar el puntero de este en una función miembro?

Tengo una aplicación que involucra objetos de diferentes tipos de clase. Los objetos son referenciados por punteros. Un puntero nulo significa que el objeto asociado no existe. Actualmente, los códigos de llamada son engorrosos, ya que cada vez que utiliza un puntero a un objeto, comprueba el valor del puntero para determinar si es nulo y, si realiza alguna acción, es nulo. Debido a que la acción predeterminada que se debe tomar en el caso de la no existencia depende del tipo de objeto, preferiría codificarlo en las clases para los objetos en lugar de en el programa de llamada. Esto resulta en construcciones como las siguientes:

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

Claramente, la función miembro no puede ser virtual, porque la tabla de búsqueda no existe cuando el objeto no existe, y la llamada virtual fallaría. Pero, ¿es este código C ++ legal para funciones miembro no virtuales? Parece funcionar correctamente para los compiladores en los que lo he probado, pero me preocupa la posible no portabilidad. En la norma no puedo encontrar una cláusula que permita expresamente o prohíba expresamente tales construcciones.

Respuestas a la pregunta(5)

Su respuesta a la pregunta