我正在创建一个与一些 Windows API 代码互操作的类,现在我必须初始化的指针之一是通过调用初始化它的本机函数来完成的。
我的指针是std::unique_ptr
带有自定义删除器的类型,它调用提供的 WinAPI 删除器函数,但是我无法将带有 & address-of 运算符的 unique_ptr 传递给 init 函数。为什么?
我创建了一个示例来演示我的问题:
#include <memory>
struct foo
{
int x;
};
struct custom_deleter {};
void init_foo(foo** init)
{
*init = new foo();
}
int main()
{
std::unique_ptr<foo, custom_deleter> foo_ptr;
init_foo(&foo_ptr);
}
编译器咆哮着说:
source.cpp: In function 'int main()':
source.cpp:19:21: error: cannot convert 'std::unique_ptr<foo, custom_deleter>*' to 'foo**' for argument '1' to 'void init_foo(foo**)'