gpt4 book ai didi

c++ - auto_ptr 会防止这种情况发生吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:09 24 4
gpt4 key购买 nike

我不太清楚 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;
}

smart 离开其封闭范围时,myA._member 引用是否有效?如果 auto_ptr 不是这里的答案,那是什么?

编辑:我看到我把每个人都弄糊涂了;我必须在范围外返回 myA,这就是为什么我关心 _member 在 smart 退出范围后是否有效。

最佳答案

这对你没有帮助。 _member 将成为悬空句柄。这是因为 auto_ptr保证在范围结束时销毁:不多,不少

有 2 个可能的答案。

  • 您可以将_member 的类型设置为boost::shared_ptr<const B> .
  • 或者,如果类 B 是可复制单态,并且对象标识不需要保留,您可以使 _member 成为一个值,并在那里存储参数的拷贝。这是迄今为止最简单的选择,但显然它的局限性很大。

回应您的编辑:我所说的确实是这种情况。通过按值返回 myA,创建了一个拷贝,拷贝的_member 指的是已经销毁的本地。如前所述,shared_ptr值语义解决了这个问题。

关于c++ - auto_ptr 会防止这种情况发生吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/627273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com