gpt4 book ai didi

c++ - 使用 SDL 的智能指针

转载 作者:可可西里 更新时间:2023-11-01 14:54:51 24 4
gpt4 key购买 nike

对于我的游戏,我应该使用原始指针来创建 SDL_WindowSDL_RendererSDL_Texture 等,因为它们具有特定的删除功能

SDL_DestroyTexture(texture); 

或者我应该在创建 unique_ptrshared_ptr 时添加自定义删除器,如果是这样,我将如何使用 SDL 类型执行此操作?

最佳答案

您可以创建一个具有多个重载的 operator() 实现的仿函数,每个实现都会为各自的参数类型调用正确的 destroy 函数。

struct sdl_deleter
{
void operator()(SDL_Window *p) const { SDL_DestroyWindow(p); }
void operator()(SDL_Renderer *p) const { SDL_DestroyRenderer(p); }
void operator()(SDL_Texture *p) const { SDL_DestroyTexture(p); }
};

将其作为删除器传递给 unique_ptr,如果需要,您可以编写包装函数来创建 unique_ptr

unique_ptr<SDL_Window, sdl_deleter>
create_window(char const *title, int x, int y, int w, int h, Uint32 flags)
{
return unique_ptr<SDL_Window, sdl_deleter>(
SDL_CreateWindow(title, x, y, w, h, flags),
sdl_deleter());
}

关于c++ - 使用 SDL 的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251747/

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