当前位置:  开发笔记 > 编程语言 > 正文

auto_ptr会防止这种情况吗?

如何解决《auto_ptr会防止这种情况吗?》经验,为你挑选了1个好方法。

我不太清楚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在智能退出范围后有效.



1> 小智..:

它对你没有帮助._member将成为悬挂的手柄.这是因为auto_ptr在范围结束时保证破坏:不再多,也不少.

有2个可能的答案.

你可以制作_member的类型boost::shared_ptr.

或者,如果B类很小,不需要保留复制,单态和对象标识,则可以使_member成为值,并在其中存储参数的副本.这是迄今为止最简单的选择,但显然它是非常有限的.

回应你的编辑:我确实在谈论这种情况.通过按值返回myA,创建一个副本,副本的_member引用已经被破坏的本地.如上所述,两者shared_ptr和值语义都解决了这个问题.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有