Ссылка сохраняется, поскольку она все еще ссылается на существующий объект. Указатель этого не делает, потому что он указывает на более не существующий объект.
риментируя сэтот вопрос Я создал пример, который я совершенно не понимаю. В частности, это подчеркивает мое недопонимание указателей, ссылок и повышения :: 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;
Выполнение этого кода дает на выходе что-то вроде этого:
r=100
r=100
*p=100
*p=13
Почему ссылка переживает смерть shared_ptr, а указатель - нет?
В ответах здесь есть проблема в том, что, кажется, есть два диаметрально противоположных и противоречивых решения, и нет единого мнения о том, какая истина. Я хотел бы иметь возможность использовать ссылку после удаления shared_ptr, но если он недействителен, мне действительно нужно это понять.
Возможно, кто-то может опубликовать простой пример, который демонстрирует неопределенное поведение в ссылке.