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

What's the proper way to save a reference to an object with 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;
}

B::obj一个引用不管是什么类型都是一样的。引用就是引用就是引用,不管它是对 int 还是 std::shared_ptr<A>.

的引用

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

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

换句话说:不要保存对 std::shared_ptr.

的引用