将std :: shared_ptr与&使用之间有什么区别?而不是为了保存对象的引用?
class A{};
class B
{
private:
std::shared_ptr<A>&obj; // or std::shared_ptr<A>obj;
public:
B(std::shared_ptr<A>r) : obj(r) {}
};
int main()
{
std::shared_ptr<A>a(new A());
std::unique_ptr<B>b(new B(a));
std::cin.get();
return 0;
}
答案 0 :(得分:5)
无论是什么类型,使B::obj
引用都是相同的。参考是参考是参考,如果它是对int
或std::shared_ptr<A>
的引用并不重要。
请注意,由于您按值传递B
构造函数参数,因此一旦构造函数返回,它将超出范围,使对r
的任何引用无效。
最后,保存对std::shared_ptr
的引用确实没有任何意义。有时候传递一个std::shared_ptr
引用参数是有意义的,但实际上并不存储这样的引用。引用是std::shared_ptr
对象,而不是std::shared_ptr
指向的对象,使用引用不会增加内部计数器,也不会使用std::shared_ptr
的共享所有权语义。 / p>
换句话说:不要保存对std::shared_ptr
的引用。