智能指针与SDL [英] Smart pointers with SDL
问题描述
对于我的游戏,我应该使用一个原始指针创建 SDL_Window
, SDL_Renderer
,
SDL_DestroyTexture(texture);
或者我应该在创建 unique_ptr $时添加自定义删除器
shared_ptr
/ div> 你可以创建一个函数,它有几个重载的 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
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 ,x,y,w,h,flags),
sdl_deleter());
}
For my game should I use a raw pointer to create SDL_Window
, SDL_Renderer
, SDL_Texture
etc. as they have specific delete functions
SDL_DestroyTexture(texture);
or should I add a custom deleter when I create a unique_ptr
or shared_ptr
and if so how would I do this with SDL types?
You could create a functor that has several overloaded operator()
implementations, each of which call the correct destroy function for the respective argument type.
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); }
};
Pass this as the deleter to a unique_ptr
, and you could write wrapper functions if you wanted to, to create the 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());
}
这篇关于智能指针与SDL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!