C++ 什么';这是使用shared_ptr保存对对象的引用的正确方法

C++ 什么';这是使用shared_ptr保存对对象的引用的正确方法,c++,shared-ptr,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::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;
}
A类{};
B类
{
私人:
std::shared_ptr&obj;//或std::shared_ptrobj;
公众:
B(std::shared_ptrr):obj(r){}
};
int main()
{
std::shared_ptra(新的A());
标准:唯一的(新的B(a));
std::cin.get();
返回0;
}

制作
B::obj
参考是相同的,无论它是什么类型。引用是引用是引用,不管它是对
int
的引用还是对
std::shared\u ptr
的引用

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

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


换句话说:不要保存对
std::shared_ptr
的引用,使
B::obj
引用无论是什么类型,都是相同的。引用是引用是引用,不管它是对
int
的引用还是对
std::shared\u ptr
的引用

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

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


换句话说:不要保存对
std::shared\u ptr

的引用我想知道使用智能指针是否比取消引用对象(作为指针传递)更好,以将obj保存为正常引用我想知道使用智能指针是否比取消引用对象(作为指针传递)更好将obj保存为正常参考的步骤