boost :: shared_ptr question. ¿Por qué funciona esto?

Al experimentar conesta pregunta Creé un ejemplo que no entiendo completamente. En particular, destaca mi malentendido de punteros, referencias y el boost :: shared_ptr.

int& r = *(new int(0));//gratuitous pointer leak, got to initialize it to something
{
    boost::shared_ptr<int> sp(new int(100));
    r = *sp;
    cout << "r=" << r << endl;
}
cout << "r=" << r << endl << endl;

int* p;
{
    boost::shared_ptr<int> sp(new int(100));
    p = &*sp;
    cout << "*p=" << *p << endl;
}
cout << "*p=" << *p << endl;

Ejecutar este código le da a una salida algo como esto:

r=100
r=100

*p=100
*p=13

¿Por qué la referencia sobrevive a la muerte de shared_ptr pero el puntero no?

Hay un problema en las respuestas aquí en que parece haber dos soluciones diametralmente opuestas y contradictorias y no hay consenso sobre cuál es la verdad. Me gustaría poder usar una referencia después de que se haya eliminado un shared_ptr, pero si no es válido, realmente necesito entender esto.

Quizás alguien pueda publicar un ejemplo simple que demuestre el comportamiento indefinido en la referencia.

Respuestas a la pregunta(3)

Su respuesta a la pregunta