Windows API コードと相互運用するクラスを作成しています。現在、初期化する必要があるポインターの 1 つは、それを初期化するネイティブ関数を呼び出すことによって行われます。
私のポインターは、std::unique_ptr
提供された WinAPI デリーター関数を呼び出すカスタム デリーターを備えたタイプですが、& address-of 演算子を使用して unique_ptr を init-function に渡すことはできません。なんで?
私の問題を示すサンプルを作成しました。
#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**)'