pergunta boost :: shared_ptr. Por que isso funciona?
Ao experimentar comessa questão Criei um exemplo que não entendo totalmente. Em particular, destaca meu mal-entendido sobre ponteiros, referências e o 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;
A execução desse código fornece uma saída semelhante a esta:
r=100
r=100
*p=100
*p=13
Por que a referência sobrevive à morte do shared_ptr, mas o ponteiro não?
Há um problema nas respostas aqui em que parece haver duas soluções diametralmente opostas e contraditórias e nenhum consenso sobre qual é a verdade. Gostaria da capacidade de usar uma referência depois que um shared_ptr for excluído, mas se for inválido, realmente preciso entender isso.
Talvez alguém possa postar um exemplo simples que demonstre o comportamento indefinido na referência.