int& fun()
{
int * temp = NULL;
return *temp;
}
En el método anterior, estoy tratando de desreferenciar un puntero NULL. Cuando llamo a esta función, no da excepción. Encontré que cuando el tipo de devolución es por referencia, no da una excepción si es por valor y luego lo hace. Incluso cuando la eliminación de referencia del puntero NULL se asigna a la referencia (como la línea siguiente), tampoco da.Asignación de una referencia desreferenciando un puntero NULL
int* temp = NULL:
int& temp1 = *temp;
Aquí mi pregunta es que el compilador no hace la desreferenciación en caso de referencia?
Las referencias se manejan como apuntadores internamente, solo que son diferentes en la sintaxis que se usa en ellas. Sabiendo que su desreferenciación solo "asigna" el valor del puntero a la referencia, lo que hace referencia a NULL. Eso no dispara ningún acceso a la memoria. Cuando regrese por valor, la desreferenciación dará como resultado un acceso a la memoria en 0, que casi siempre le da una segfault. – Nobody
Consulte este artículo, que explica por qué el puntero NULL es una característica terrible en OOP y debe evitarse a toda costa: http://www.yegor256.com/2014/05/13/why-null-is-bad.html – yegor256