保持对唯一指针引用的唯一指针引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保持对唯一指针引用的唯一指针引用相关的知识,希望对你有一定的参考价值。

这是一个代表我的概念问题的程序:

int main()
{
  unique_ptr<int> a = make_unique(5);
  {
    unique_ptr<int>& b = a;
  }
  printf("%d",*a);
}
  • a是对象的拥有者吗?
  • a超出范围时,somepointer的值是否会被破坏?

通过运行上面的代码我看到它没有,但我不明白为什么。作业究竟发生了什么?

答案

a一直是这个物体的拥有者。

在C ++中,将&放在变量名之前会创建一个引用,就像一个隐式指针。由于您已将b声明为参考,因此此代码中只有一个unique_pointeraunique_pointer本身,参考b指向那个指针。

这就是当包含unique_pointer的块被退出时b没有被破坏的原因; b从未拥有该资源,因为b从来不是一个unique_pointer开头,只提到一个。

有关参考文献的完整课程,请参阅learncpp

另一答案

b的赋值只是一个参考,它与a的对象寿命无关。想象一下,你已经把一个函数传递给一个带有unique_ptr<int> &的函数,在这种情况下,你不会指望引用改变a的生命周期,你为什么要这样做呢?

以上是关于保持对唯一指针引用的唯一指针引用的主要内容,如果未能解决你的问题,请参考以下文章

当原始指针和唯一指针都引用同一个对象时,如何避免双重释放?

指针/引用数组?

为啥我应该在抛出异常指针时使用按引用捕获

使用 Kotlin 在片段中引用 RecyclerView 时出现空指针错误

返回后指针不会从函数返回到它的引用(保持为空)C++

唯一指针内存泄漏