gpt4 book ai didi

c++ - 在 SDL 中,SDL_Quit() 会释放每个表面吗?

转载 作者:太空狗 更新时间:2023-10-29 20:31:55 25 4
gpt4 key购买 nike

基本上,在程序终止之前将一直存在的表面上,我是否需要为每个表面运行 SDL_FreeSurface(),或者 SDL_Quit()为我处理这一切?

我问主要是因为指向我的一些表面的指针是类成员,因此如果我想运行 SDL_FreeSurface() 我需要跟踪每个类实例(在全局数组或其他东西中) 在它们各自的表面上。如果 SDL_Quit() 能一口气为我完成这一切,我宁愿选择它 :D

最佳答案

我查看了 SDL 1.2.15 源代码,以了解在调用 SDL_Quit 时实际发生了什么。 Gemini14's answer是正确的:SDL_Quit 只会释放 SDL_SetVideoMode 返回的主 SDL_Surface。

原因如下:

  1. SDLQuit 调用SDLQuitSubSystem 退出每个子系统
  2. SDLQuitSubSystem 会调用几个子系统退出函数
    • 特别是调用了 SDL_VideoQuit
  3. SDL_VideoQuit 首先检查静态全局指针 current_video 是否不为 NULL。
    • 如果 current_video 不为 NULL,则该函数会先清除几个全局变量。
    • SDL_FreeSurfaceSDL_ShadowSurfaceSDL_VideoSurface 上调用
      • SDL_ShadowSurfaceSDL_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com