SDL2 |包装器类访问冲突

时间:2018-08-15 06:52:06

标签: c++ sdl-2

我一直在围绕一些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_FillRectSDL_Window*都包装到一个包装类中,则从该类对SDL_Surface的调用可以正常工作。

这两种方法之间可能有什么区别?

SDL_FillRect

1 个答案:

答案 0 :(得分:1)

Surface(SDL2::Window window)
                    ^ missing &

您正在按值传递Window,导致~Window()会在SDL_Window构造函数返回后立即对基础Surface进行核对,从而使{返回的表面无效{1}}。

通过参考传递它们:

SDL_GetWindowSurface()