.reset对shared_pointer做了什么

时间:2014-11-23 01:10:35

标签: c++ shared-ptr

我想知道.reset()对共享指针的作用。 它是否简单地将共享指针的引用计数减1,如上所述here,还是删除对重置计数为0的对象的所有引用计数

这是我的代码示例

std::vector<boost::shared_ptr<foo>> vec;
boost::shared_ptr<foo> f(boost::make_shared<foo>()); //ref count 1
vec.push_back(f); //ref count 1
vec.push_back(f); //ref count 3
int a = f.use_count(); //Will return 3
f.reset();        //Will turn the refernece count to 0
vec[1].reset();   //Will reduce the reference count by 1.
a = f.use_count();

我很好奇为什么f.reset()将引用计数变为0而vec[1].reset()将引用计数减少1

1 个答案:

答案 0 :(得分:2)

它会释放当前的参考。其他参考文献不受影响。