我应该使用原始指针来创建SDL_Window
、SDL_Renderer
、SDL_Texture
等游戏内容吗?因为它们有特定的删除函数。
SDL_DestroyTexture(texture);
我应该在创建unique_ptr
或shared_ptr
时添加自定义删除器吗?如果是这样,那么对于SDL类型,我该如何操作?
我应该使用原始指针来创建SDL_Window
、SDL_Renderer
、SDL_Texture
等游戏内容吗?因为它们有特定的删除函数。
SDL_DestroyTexture(texture);
我应该在创建unique_ptr
或shared_ptr
时添加自定义删除器吗?如果是这样,那么对于SDL类型,我该如何操作?
您可以创建一个函数对象,该对象具有多个重载的operator()
实现,每个实现都调用相应参数类型的正确销毁函数。
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
s
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());
}
unique_ptr
,它会自动销毁某些SDL_*
对象吗? - Praetorian