保持对唯一指针引用

时间:2017-12-24 17:27:19

标签: c++ reference smart-pointers destroy

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

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

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

2 个答案:

答案 0 :(得分:3)

b的分配只是一个参考,它与a的对象生命周期无关。想象一下,你已经把一个函数传递给了一个unique_ptr<int> &的函数,你不会指望引用会改变那个案例的生命周期,你为什么要这样做呢?

答案 1 :(得分:3)

a一直是对象的拥有者。

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

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

有关参考资料的完整课程,请参阅learncpp