为了保存对象的引用,使用和不使用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)
制作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.
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |