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

phi*_*dvd 1 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;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

制作B::obj一提的是一样的,不管它是什么类型.参考是参考是参考,如果它是对a int或a的引用无关紧要std::shared_ptr<A>.

请注意,由于您B按值传递构造函数参数,因此一旦构造函数返回,它将超出范围,并保留对rinvalid的任何引用.

最后,保存对a的引用确实没有任何意义std::shared_ptr.它有时是有道理的通过一个std::shared_ptr基准参数,但不能真正存储这样的参考.引用是指std::shared_ptr对象,而不是std::shared_ptr指向的对象,使用引用不会增加内部计数器,也不会使用共享所有权语义std::shared_ptr.

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