2014-11-23 437 views
-1

我想知道.reset()对共享指针有什么作用。 是否如所提到的here它简单地由一个递减一个共享指针的引用计数或它删除所有引用计数到对象重置的计数为0.reset对共享指针做了什么

这是我在这里的代码示例

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

+4

您是否阅读过任何文档,或http://en.cppreference.com/w/cpp/memory/shared_ptr/reset? – 2014-11-23 01:12:20

回答

2

它释放当前参考。其他参考不受影响。

+0

@MistyD调用'f.reset()'后,_of course_'f.use_count()'为0,它没有任何引用!但是如果你调用'vec [0] .use_count()',它应该有正确的编号。 – 2014-11-23 01:53:17

+0

感谢您解决这个问题 – MistyD 2014-11-23 02:06:06