c++ - boost::shared_ptr 使用次数

标签 c++ pointers shared-ptr

我试图理解以下代码中发生的事情。当object-a被删除时,它的shared_ptr成员变量object-b是否还留在内存中,因为object-c持有一个指向object-b的shared_ptr?

    class B
    {
    public:
       B(int val)
       {
          _val = val;
       }
       int _val;
    };

    class A
    {
    public:
       A()
       {
          _b = new B(121);
       }
       boost::shared_ptr<B> _b;
    };

    class C
    {
    public:
       C()
       {
       }

       void setRef( boost::shared_ptr<B> b)
       {
          _b = b;
       }
       boost::shared_ptr<B> _b;
    };

    int main()
    {
       C c;
       {
          A *a = new A();       
          cout << "a._b.use_count: " << a->_b.use_count() << endl;
          c.setRef(a->_b);
          cout << "a._b.use_count: " << a->_b.use_count() << endl;
                  delete a;
       }
       cout << c._b->_val << endl;
    }

最佳答案

不,当a被删除后,a->_b(指针本身)将不复存在。

a->_b 指向的对象 将继续存在,因为 c._b 仍然指向它。

关于c++ - boost::shared_ptr 使用次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/890933/

相关文章:

c++ - MySQL Connector C++ cgi 程序是否像 php 一样易受 MySQL 注入(inject)攻击?

c++ - 在 [0..n-1] 范围内生成 m 个不同的随机数

c++ - 使用 Type** &x 创建动态数组

c++ - 如何定义矩阵-矩阵乘法,使其也适用于 vectorXvector、vectorXmatrix 和 matrixXvector?

c++ - 在C/C++中使用双指针有什么好处

c - C99 标准是否允许将变量分配给自身?

C 编程链表指针返回奇怪的值

c++ - 在堆上分配 shared_ptr 是否可能存在内存泄漏?

c++ - 可能的 MSVC 编译器错误

c++ - 任何人都知道有什么计划让 ^ 成为 shared_ptr<T> 的简写吗?