¿Alguna vez tiene sentido comprobar esto == nulo? Encontré esto mientras hacía una revisión del código.
En C++ estándar, no lo hace, porque cualquier llamada en un puntero nulo es ya un comportamiento indefinido, por lo que cualquier código de depender de tales controles no es estándar (no hay garantía de que el cheque incluso será ejecutado).
Tenga en cuenta que esto también se aplica a las funciones no virtuales.
Algunas implementaciones permiten this==0
, sin embargo, y en consecuencia las bibliotecas escritas específicamente para esas implementaciones algunas veces lo usarán como un hack. Un buen ejemplo de dicho par es VC++ y MFC: no recuerdo el código exacto, pero recuerdo claramente haber visto if (this == NULL)
verificaciones en el código fuente de MFC en alguna parte.
También puede estar allí como una ayuda para la depuración, porque en algún momento en el pasado este código fue golpeado con this==0
debido a un error en la persona que llama, por lo que se insertó un cheque para coger las futuras instancias de ese. Sin embargo, una afirmación tendría más sentido para tales cosas.
Si esto == null significa que el objeto se ha eliminado.
No, no significa eso. Significa que se llamó a un método en un puntero nulo, o en una referencia obtenida de un puntero nulo (aunque obtener dicha referencia ya es U.B.). Esto no tiene nada que ver con delete
, y no requiere que ningún objeto de este tipo haya existido alguna vez.
No significa que el objeto fue eliminado. Eliminar un puntero no lo pone a cero automáticamente, y '((Foo *) 0) -> foo()' es una sintaxis perfectamente válida. Siempre y cuando 'foo()' no sea una función virtual, esto funcionará incluso en la mayoría de los compiladores, pero es simplemente asqueroso. –
"puede causar que el objeto se elimine mientras otro hilo está dentro del método". Esto no es aceptable, no debe eliminar un objeto mientras que otro código (en el mismo subproceso o uno diferente) conserva una referencia que usará. Tampoco hará que 'this' se vuelva nulo en ese otro hilo. –
Estoy viendo una situación en este momento donde definitivamente es NULL. Dios solo sabe por qué. – Owl