我一直在围绕一些SDL2功能制作一些非常简单的包装。我创建了一个包装SDL_Window*
的类和一个包装SDL_Surface*
的类。
在我的SDL_Surface
包装器(SDL2::Surface
中,构造函数接受SDL2:::Window
包装器并将SDL_Window*
(通过getter调用)与{{1} } SDL_Surface*
中的成员变量。
然后,我有SDL2::Surface
呼叫:
SDL2::Surface::FillRect()
在此构造下,我对SDL_FillRect(Surface, NULL, SDL_MapRGB(Surface->format, 0xFF, 0x00, 0xFF));
的调用出现访问冲突异常。但是,如果我将SDL_FillRect
和SDL_Window*
都包装到一个包装类中,则从该类对SDL_Surface
的调用可以正常工作。
这两种方法之间可能有什么区别?
SDL_FillRect
答案 0 :(得分:1)
Surface(SDL2::Window window)
^ missing &
您正在按值传递Window
,导致~Window()
会在SDL_Window
构造函数返回后立即对基础Surface
进行核对,从而使{返回的表面无效{1}}。
通过参考传递它们:
SDL_GetWindowSurface()