我不太清楚auto_ptr在这种情况下是否会帮助我:
class A
{
A(const B& member)
: _member(B)
{};
...
const B& _member;
};
A generateA() {
auto_ptr<B> smart(new B());
A myA(*smart);
return myA;
}
Run Code Online (Sandbox Code Playgroud)
离开其封闭范围myA._member时,引用是否有效smart?如果auto_ptr不是这里的答案,那是什么?
编辑:我看到我困惑每个人的地方; 我必须将myA返回到范围之外,这就是为什么我关心_member在智能退出范围后有效.
小智 6
它对你没有帮助._member将成为悬挂的手柄.这是因为auto_ptr在范围结束时保证破坏:不再多,也不少.
有2个可能的答案.
boost::shared_ptr<const B>.回应你的编辑:我确实在谈论这种情况.通过按值返回myA,创建一个副本,副本的_member引用已经被破坏的本地.如上所述,两者shared_ptr和值语义都解决了这个问题.