title: Is there a non-atomic equivalent of std::shared_ptr? And why isn't there one in <memory>?
body: <p>This is a bit of a two part question, all about the atomicity of <code>std::shared_ptr</code>:</p>
  
  <p><strong>1.</strong>
  As far as I can tell, <code>std::shared_ptr</code> is the only smart pointer in <code>&lt;memory&gt;</code> that's atomic. I'm wondering if there is a non-atomic version of <code>std::shared_ptr</code> available (I can't see anything in <code>&lt;memory&gt;</code>, so I'm also open to suggestions outside of the standard, like those in Boost). I know <code>boost::shared_ptr</code> is also atomic (if <code>BOOST_SP_DISABLE_THREADS</code> isn't defined), but maybe there's another alternative? I'm looking for something that has the same semantics as <code>std::shared_ptr</code>, but without the atomicity.</p>
  
  <p><strong>2.</strong> I understand why <code>std::shared_ptr</code> is atomic; it's kinda nice. However, it's not nice for every situation, and C++ has historically had the mantra of "only pay for what you use." If I'm not using multiple threads, or if I am using multiple threads but am not sharing pointer ownership across threads, an atomic smart pointer is overkill. My second question is <em>why wasn't a non-atomic version of <code>std::shared_ptr</code> provided in C++11</em>? (assuming there is a <em>why</em>) (if the answer is simply "a non-atomic version was simply never considered" or "no one ever asked for a non-atomic version" that's fine!).</p>
  
  <p>With question #2, I'm wondering if someone ever proposed a non-atomic version of <code>shared_ptr</code> (either to Boost or the standards committee) (not to replace the atomic version of <code>shared_ptr</code>, but to coexist with it) and it was shot down for a specific reason.</p>