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);
我正在为 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);