C++ make::shared 包装现有的原始指针

C++ make::shared wrapping on existing raw pointer

我正在为 FMOD 库开发一个小型包装器。下面是我的代码片段,还有其他库管理 SoundData class:

class SoundData
{
public: 
    ...
    std::string mSoundName;
    std::shared_ptr<FMOD::Sound> mFmodSoundHandle;
    ...
}

void SoundLib::CreateSound(SoundData& data)
{
    FMOD::Sound *sound = nullptr;
    system->createSound(data.mSoundName.data(), FMOD_DEFAULT, nullptr, &sound);
    data.mFmodSoundHandle = std::make_shared<FMOD::Sound>(sound);
}

尝试编译这段代码时,出现此错误:

Error C2664 'FMOD::Sound::Sound(const FMOD::Sound &)': cannot convert argument 1 from 'FMOD::Sound *' to 'const FMOD::Sound &' SoundLib ...\MSVC.29.30133\include\xutility 158

我不是很明白我是不是用错了std::make_shared()?这里的目标是将作为 sound 变量传递的 createSound() 的输出保存到结构 SoundData 中。可变数据将在之后进行管理。

您正在传递一个您应该传递引用的指针。试试 *sound.

请注意,您没有包装指针,您正在创建 Sound 的新实例并将 *sound 的值复制到其中。

包装它考虑:

data.mFmodSoundHandle.reset(sound);