将唯一指针引用保存到唯一指针引用
Hold a unique pointer reference to a unique pointer reference
这是一个代表我的概念问题的程序:
int main()
{
unique_ptr<int> a = make_unique(5);
{
unique_ptr<int>& b = a;
}
printf("%d",*a);
}
a
是对象的所有者吗?
- 当
a
超出范围时,somepointer的值是否被销毁?
通过运行上面的代码我看到没有,但我不明白为什么。作业中究竟发生了什么?
对b
的赋值只是一个引用,与a
的对象生命周期无关。想象一下,你已经将 a 传递给一个接受 unique_ptr<int> &
的函数,在这种情况下你不会期望引用改变 a 的生命周期,你为什么要在这里这样做?
a
一直是对象的所有者。
在 C++ 中,在变量名前放置 &
会创建一个引用,类似于隐式指针。由于您已将 b
声明为引用,因此此代码中只有一个 unique_pointer
。 a
是 unique_pointer
本身,而 reference b
指向那个指针。
这就是当包含 b
的块退出时 unique_pointer
没有被销毁的原因; b
从未拥有该资源,因为 b
一开始就不是 unique_pointer
,只是对一个资源的 引用。
有关参考资料的完整课程,请参阅 learncpp。
这是一个代表我的概念问题的程序:
int main()
{
unique_ptr<int> a = make_unique(5);
{
unique_ptr<int>& b = a;
}
printf("%d",*a);
}
a
是对象的所有者吗?- 当
a
超出范围时,somepointer的值是否被销毁?
通过运行上面的代码我看到没有,但我不明白为什么。作业中究竟发生了什么?
对b
的赋值只是一个引用,与a
的对象生命周期无关。想象一下,你已经将 a 传递给一个接受 unique_ptr<int> &
的函数,在这种情况下你不会期望引用改变 a 的生命周期,你为什么要在这里这样做?
a
一直是对象的所有者。
在 C++ 中,在变量名前放置 &
会创建一个引用,类似于隐式指针。由于您已将 b
声明为引用,因此此代码中只有一个 unique_pointer
。 a
是 unique_pointer
本身,而 reference b
指向那个指针。
这就是当包含 b
的块退出时 unique_pointer
没有被销毁的原因; b
从未拥有该资源,因为 b
一开始就不是 unique_pointer
,只是对一个资源的 引用。
有关参考资料的完整课程,请参阅 learncpp。