title: C++ make::shared wrapping on existing raw pointer
body: <p>I am working on a small wrapper for an FMOD library. Below is a snippet of the code that I have, and there are other libraries that manage the <code>SoundData</code> class:</p>
  <pre><code>class SoundData
  {
  public: 
      ...
      std::string mSoundName;
      std::shared_ptr&lt;FMOD::Sound&gt; mFmodSoundHandle;
      ...
  }
  
  void SoundLib::CreateSound(SoundData&amp; data)
  {
      FMOD::Sound *sound = nullptr;
      system-&gt;createSound(data.mSoundName.data(), FMOD_DEFAULT, nullptr, &amp;sound);
      data.mFmodSoundHandle = std::make_shared&lt;FMOD::Sound&gt;(sound);
  }
  </code></pre>
  <p>Trying to compile this snippet of the code, I get this error:</p>
  <blockquote>
  <p>Error C2664   'FMOD::Sound::Sound(const FMOD::Sound &amp;)': cannot convert argument 1 from 'FMOD::Sound *' to 'const FMOD::Sound &amp;'  SoundLib    ...\MSVC\14.29.30133\include\xutility   158</p>
  </blockquote>
  <p>I cannot quite understand if I am using <code>std::make_shared()</code> in the wrong way here? The goal here is to save the output from <code>createSound()</code> that is passed as a <code>sound</code> variable into the structure <code>SoundData</code>. Variable data will be managed afterwards.</p>