我试图理解以下代码中发生的事情。当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/