C++ 什么';这是使用shared_ptr保存对对象的引用的正确方法
为了保存对对象的引用,使用std::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(
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保存为正常参考的步骤