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.