title: what does .reset do to a shared_pointer
body: <p>I wanted to know what <code>.reset()</code> does to a shared pointer. 
  Does it simply decrement the reference count of a shared pointer by one as mentioned <a href="https://stackoverflow.com/questions/621233/how-to-intentionally-delete-a-boostshared-ptr">here</a> or does it remove all reference counts to an object resetting the count to 0</p>
  
  <p>This is my code sample here</p>
  
  <pre><code>std::vector&lt;boost::shared_ptr&lt;foo&gt;&gt; vec;
  boost::shared_ptr&lt;foo&gt; f(boost::make_shared&lt;foo&gt;()); //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();
  </code></pre>
  
  <p>I am curious as to why doing <code>f.reset()</code> turns the reference count to 0 while <code>vec[1].reset()</code> reduces the reference count by 1 </p>