基本上,在程序终止之前将一直存在的表面上,我是否需要为每个表面运行 SDL_FreeSurface()
,或者 SDL_Quit()
为我处理这一切?
我问主要是因为指向我的一些表面的指针是类成员,因此如果我想运行 SDL_FreeSurface() 我需要跟踪每个类实例(在全局数组或其他东西中)
在它们各自的表面上。如果 SDL_Quit() 能一口气为我完成这一切,我宁愿选择它 :D
最佳答案
我查看了 SDL 1.2.15 源代码,以了解在调用 SDL_Quit
时实际发生了什么。 Gemini14's answer是正确的:SDL_Quit
只会释放 SDL_SetVideoMode
返回的主 SDL_Surface。
原因如下:
SDLQuit
调用SDLQuitSubSystem
退出每个子系统SDLQuitSubSystem
会调用几个子系统退出函数- 特别是调用了
SDL_VideoQuit
。
- 特别是调用了
SDL_VideoQuit
首先检查静态全局指针current_video
是否不为 NULL。- 如果
current_video
不为 NULL,则该函数会先清除几个全局变量。 SDL_FreeSurface
在SDL_ShadowSurface
或SDL_VideoSurface
上调用SDL_ShadowSurface
或SDL_VideoSurface
已初始化并从SDL_SetVideoMode
返回
- 如果
由于 SDL_FreeSurface
仅在由 SDL_SetVideoMode
初始化的主 SDL_Surface 上调用,我们可以推断分配内存的所有其他 SDL_Surface 变量都是 不通过调用 SDL_Quit
释放,因此必须通过显式调用 SDL_FreeSurface
释放。
但是,由于通常对于所有程序,操作系统都会在程序结束时自动释放内存,因此如果您的程序在 SDL_Quit
之后继续运行,释放 SDL_Surface 变量只是一个问题。
关于c++ - 在 SDL 中,SDL_Quit() 会释放每个表面吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099229/