C++에서 SDL2 라이브러리를 사용하려고하므로 일부 함수에는 SDL_Window 또는 SDL_Renderer에 대한 이중 포인터가 필요합니다. 나는 SDL_Window에 대한 일부 메모리를 malloc으로 할당 한 고유 포인터과 같이 있음을 주었다했습니다 http://www.codeproject.com/Articles/820931/Using-std-unique-ptr-RAII-with-malloc-and-freeunique_ptr에 저장된 포인터의 주소를 얻는 방법은 무엇입니까?
그래서 지금은 필요 :
window = unique_ptr<SDL_Window, decltype(free) *>
reinterpret_cast<SDL_Window *>(malloc(sizeof(SDL_Window))),
free};
나는 그 때 다음 사이트를 사용 unique_ptr 내부에 저장된 포인터에 대한 포인터를 얻지 만 그렇게하는 데 문제가 있습니다. 내가 좋아하는 일을 시도했다 :
&window.get()
// or
&&(*window)
// or
&window
// and even
&(&(*(window.get())))
좌변 값과 같은 이상한 컴파일러 오류 결과이 모든
는 처음과 마지막의 경우 전적으로 이해할 수있다 단항 '&'연산자에 대한 요구된다.업데이트 이제도의 주소를 얻기 위해 * 원시 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());
왜 malloc을 사용하여 SDL_Window 객체를 할당하고 있습니까? –
벤자민의 질문에 나는 방금 메모리 할당을하지 않는다는 것을 깨달았다. SDL_CreateWindow는 않습니다. 이를 반영하도록 코드를 수정했습니다. – user3211355
예, 허 키릴. 나는 잠시 멈추고 그 기능에 대해 생각해 본 후 그것을 인식한다. 아직도 이상한 컴파일러 오류가 발생하는 이유는 모르겠지만, 겉으로보기에는 unique_ptr.h 내부에서 발생합니다. – user3211355