【问题标题】:What's the proper way to save a reference to an object with shared_ptr使用 shared_ptr 保存对对象的引用的正确方法是什么
【发布时间】:2018-05-21 02:15:18
【问题描述】:

使用 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;
}

【问题讨论】:

  • 我想知道使用智能指针是否比取消引用对象(作为指针传递)将 obj 保存为普通引用更好

标签: c++ shared-ptr


【解决方案1】:

使B::obj 成为一个引用无论是什么类型都是一样的。引用就是引用,不管是引用int还是引用std::shared_ptr&lt;A&gt;

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

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

换句话说:不要保存对std::shared_ptr的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多