【发布时间】:2015-02-25 04:10:11
【问题描述】:
虽然这应该是一个微不足道的问题,但到目前为止我无法找到答案。在 C API 中,有许多函数将指针和指向指针的指针作为参数。 如何使用正确的智能指针作为 C API 的参数。
这是一个我想转换为使用 std::unique_ptr 的示例:
FMOD_SYSTEM* system = nullptr;
result = FMOD_System_Create(&system); // Create the main system object
FMOD_SOUND* musicStream;
result = FMOD_System_CreateSound(system,
musicStreamPath,
FMOD_CREATESTREAM,
nullptr,
&musicStream);
参考: FMOD_System_Create FMOD_System_CreateSound
我开始将智能指针声明为:
std::unique_ptr<FMOD_SYSTEM> system = nullptr;
std::unique_ptr<FMOD_SOUND> musicStream = nullptr;
如果我使用 .get(),以下是编译器错误:
无法转换 'std::unique_ptr::pointer {aka FMOD_SOUND*}' 到 'FMOD_SOUND**' 用于参数 '5' 到 'FMOD_RESULT FMOD_System_CreateSound(FMOD_SYSTEM*, const char*, FMOD_MODE, FMOD_CREATESOUNDEXINFO*, FMOD_SOUND**)' 音乐流.get());
^
【问题讨论】:
-
使用
.get()方法获取底层指针? -
不能只使用 .get()。似乎还有更多,但我还想不通。
-
这里有一个真正的问题和答案。我正在努力。
-
无论如何,除非您实际上应该在该指针上调用
delete(如果它由 C API 返回,则几乎不可能),您必须提供自定义删除器。
标签: c pointers c++11 smart-pointers