Я создаю класс, который перехватывает некоторый код Windows API, теперь один из указателей, который я должен инициализировать, выполняется путем вызова встроенной функции, которая инициализирует его.
Мои указатели имеют тип std::unique_ptr
с пользовательским удалением, который вызывает функцию деаэратора WinAPI, однако я не могу передать 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**)'