使用shared_ptr保存对象引用的正确方法是什么

时间:2018-05-21 02:15:18

标签: c++ shared-ptr

将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;
}

1 个答案:

答案 0 :(得分:5)

无论是什么类型,使B::obj引用都是相同的。参考是参考是参考,如果它是对intstd::shared_ptr<A>的引用并不重要。

请注意,由于您按值传递B构造函数参数,因此一旦构造函数返回,它将超出范围,使对r的任何引用无效。

最后,保存对std::shared_ptr的引用确实没有任何意义。有时候传递一个std::shared_ptr引用参数是有意义的,但实际上并不存储这样的引用。引用是std::shared_ptr对象,而不是std::shared_ptr指向的对象,使用引用不会增加内部计数器,也不会使用std::shared_ptr的共享所有权语义。 / p>

换句话说:不要保存对std::shared_ptr的引用。