Я пытаюсь использовать библиотеку SDL2 с C++ и как таковой, некоторым из функций нужен двойной указатель на SDL_Window или SDL_Renderer. Я malloc'ed некоторую память для SDL_Window и дал, что уникальный указатель, как так:Как получить адрес указателя, хранящегося в unique_ptr?
window = unique_ptr<SDL_Window, decltype(free) *>
reinterpret_cast<SDL_Window *>(malloc(sizeof(SDL_Window))),
free};
и я использовал следующий сайт в качестве руководства для этого: http://www.codeproject.com/Articles/820931/Using-std-unique-ptr-RAII-with-malloc-and-free
Так что теперь мне нужно получить указатель на указатель, хранящийся внутри unique_ptr, но у меня возникли проблемы с этим. Я пытался что-то вроде:
&window.get()
// or
&&(*window)
// or
&window
// and even
&(&(*(window.get())))
Все это привело странные ошибки компилятора, такие как L-значение, необходимое для того одноместной «&» оператора, который является полностью понятным для первых и последних случаях.
Обновления теперь я также использовать сырой SDL_Window *, чтобы получить адрес и дать unique_ptr. Некоторые из моих фрагментов коды (из контекста, хотя):
SDL_Window *window_ptr;
unique_ptr<SDL_Window> window;
window = unique_ptr<SDL_Window, decltype(SDL_DestroyWindow)> (
window_ptr,
SDL_DestroyWindow);
SDL_CreateWindowAndRenderer(500, 500, SDL_WINDOW_SHOWN, &window_ptr, &renderer_ptr);
Но теперь, я бег этой ошибки компилятора:
/usr/include/c++/5/bits/unique_ptr.h:272:18: error: no match for ‘operator=’
(operand types are ‘std::unique_ptr<SDL_Window>::deleter_type
{aka std::default_delete<SDL_Window>}’ and ‘void (*)(void*)’)
get_deleter() = std::forward<_Ep>(__u.get_deleter());
Почему вы выделяете объекты SDL_Window с помощью malloc? –
К вопросу Бенджамина я просто понял, что я не занимаюсь распределением памяти; SDL_CreateWindow делает. Я изменил свой код, чтобы отразить это. – user3211355
Да, Hurkyl. Я признаю, что после второго сделать паузу и подумать о функции ха-ха. Я до сих пор не знаю, почему я получаю эту странную ошибку компилятора, хотя, по-видимому, изнутри unique_ptr.h – user3211355