Ссылка сохраняется, поскольку она все еще ссылается на существующий объект. Указатель этого не делает, потому что он указывает на более не существующий объект.

риментируя сэтот вопрос Я создал пример, который я совершенно не понимаю. В частности, это подчеркивает мое недопонимание указателей, ссылок и повышения :: 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, но если он недействителен, мне действительно нужно это понять.

Возможно, кто-то может опубликовать простой пример, который демонстрирует неопределенное поведение в ссылке.

Ответы на вопрос(3)

Ваш ответ на вопрос