【问题标题】:Hold a unique pointer reference to a unique pointer reference持有对唯一指针引用的唯一指针引用
【发布时间】:2026-01-18 16:30:01
【问题描述】:

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

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

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

【问题讨论】:

  • a 在打印它的 ponitee 时并没有超出范围(很明显,您可以命名它)。你为什么认为会有问题?
  • 这段代码中没有赋值,只有一个初始化并将一个变量绑定到一个引用。您希望参考 b 做什么?
  • 你知道引用 &amp; 是如何工作的吗?
  • 在你的第二个项目符号中,你不是指ba吗?

标签: c++ reference smart-pointers destroy


【解决方案1】:

a 一直是该对象的所有者。

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

这就是退出包含b 的块时unique_pointer 没有被破坏的原因; b 从未拥有该资源,因为 b 一开始就不是unique_pointer,只是一个引用

请参阅learncpp 了解有关参考的完整课程。

【讨论】:

    【解决方案2】:

    b 的赋值只是一个引用,它与a 的对象生命周期无关。想象一下,如果您将 a 传递给采用 unique_ptr&lt;int&gt; &amp; 的函数,那么您不会期望在这种情况下引用会改变 a 的生命周期,为什么要在这里这样做?

    【讨论】: