使用 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
.
的引用
使用 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
.