我不太清楚auto_ptr在这种情况下是否会帮助我:
class A { A(const B& member) : _member(B) {}; ... const B& _member; }; A generateA() { auto_ptr smart(new B()); A myA(*smart); return myA; }
离开其封闭范围myA._member
时,引用是否有效smart
?如果auto_ptr不是这里的答案,那是什么?
编辑:我看到我困惑每个人的地方; 我必须将myA返回到范围之外,这就是为什么我关心_member在智能退出范围后有效.
它对你没有帮助._member将成为悬挂的手柄.这是因为auto_ptr
在范围结束时保证破坏:不再多,也不少.
有2个可能的答案.
你可以制作_member的类型boost::shared_ptr
.
或者,如果B类很小,不需要保留可复制,单态和对象标识,则可以使_member成为值,并在其中存储参数的副本.这是迄今为止最简单的选择,但显然它是非常有限的.
回应你的编辑:我确实在谈论这种情况.通过按值返回myA,创建一个副本,副本的_member引用已经被破坏的本地.如上所述,两者shared_ptr
和值语义都解决了这个问题.