Sie könnten einen Funktor erstellen, der mehrere überladene operator()
-Implementierungen enthält, von denen jede die richtige Zerstörungsfunktion für den jeweiligen Argumenttyp aufruft.
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 dies als deleter zu einem unique_ptr
, und man konnte Wrapper-Funktionen schreiben, wenn man will, um den unique_ptr
s zu erstellen
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());
}
Was ist der letzte Satz bedeuten - * wie würde ich tun das mit SDL-Variablen *? Fragen Sie, wie man ein "unique_ptr" erstellt, das automatisch ein 'SDL_ *' Objekt zerstört? – Praetorian
Sorry für schlechtes Englisch Ich hätte es nochmal durchlesen sollen. Was ich damit gemeint habe, ist, wie ich ein unique_ptr erstellen kann, um einen SDL_Window/Renderer/Texture usw. zu behandeln, weil sie alle verschiedene Möglichkeiten haben, gelöscht zu werden. Oder sollte ich einfach einen rohen Zeiger verwenden, da es keinen großen Unterschied machen würde, da ich weiß, wo sie gelöscht werden sollen. –