在试验这个问题时,我创造了一个我完全不理解的例子.特别是,它突出了我对指针,引用和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;
Run Code Online (Sandbox Code Playgroud)
运行此代码会得到如下输出:
r=100
r=100
*p=100
*p=13
Run Code Online (Sandbox Code Playgroud)
为什么引用在shared_ptr的死亡中存活但指针不存在?
这里的答案存在一个问题,即似乎存在两种截然相反且相互矛盾的解决方案,而且没有就真理达成共识.我希望能够在删除shared_ptr后使用引用,但如果它无效,我真的需要理解这一点.
也许有人可以发布一个简单的例子来演示引用中未定义的行为.