title: Should I std::move a shared_ptr in a move constructor?
body: <p>Consider:</p>
  
  <pre><code>#include &lt;cstdlib&gt;
  #include &lt;memory&gt;
  #include &lt;string&gt;
  #include &lt;vector&gt;
  #include &lt;algorithm&gt;
  #include &lt;iterator&gt;
  using namespace std;
  
  class Gizmo
  {
  public:
      Gizmo() : foo_(shared_ptr&lt;string&gt;(new string("bar"))) {};
      Gizmo(Gizmo&amp;&amp; rhs); // Implemented Below
  
  private:
      shared_ptr&lt;string&gt; foo_;
  };
  
  /*
  // doesn't use std::move
  Gizmo::Gizmo(Gizmo&amp;&amp; rhs)
  :   foo_(rhs.foo_)
  {
  }
  */
  
  
  // Does use std::move
  Gizmo::Gizmo(Gizmo&amp;&amp; rhs)
  :   foo_(std::move(rhs.foo_))
  {
  }
  
  int main()
  {
      typedef vector&lt;Gizmo&gt; Gizmos;
      Gizmos gizmos;
      generate_n(back_inserter(gizmos), 10000, []() -&gt; Gizmo
      {
          Gizmo ret;
          return ret;
      });
  
      random_shuffle(gizmos.begin(), gizmos.end());
  
  }
  </code></pre>
  
  <p>In the above code, there are two versions of <code>Gizmo::Gizmo(Gizmo&amp;&amp;)</code> -- one uses <code>std::move</code> to actually <em>move</em> the <code>shared_ptr</code>, and the other just copies the <code>shared_ptr</code>.</p>
  
  <p>Both version seem to work on the surface.  One difference (the only difference I can see) is in the non-<code>move</code> version the reference count of the <code>shared_ptr</code> is temporarily increased, but only briefly.</p>
  
  <p>I would normally go ahead and <code>move</code> the <code>shared_ptr</code>, but only to be clear and consistent in my code.  Am I missing a consideration here?  Should I prefer one version over the other for any <em>technical</em> reason?</p>