classtexture_manager{private:new_defer_frame();SDL_Renderer*m_renderer;public:texture_manager(SDL_Renderer*renderer):m_renderer(renderer){}SDL_Texture*load(constchar*asset_path){defer_frame__;// pour pas shadow celle définie au niveau de la classeautosurface=IMG_Load(asset_path);if(surface==nullptr){throwstd::runtime_error(IMG_GetError());}__.defer([&](){SDL_FreeSurface(surface);});autotexture=SDL_CreateTextureFromSurface(m_renderer,surface);if(texture==nullptr){throwstd::runtime_error(SDL_GetError());}defer({SDL_DestroyTexture(texture);});returntexture;}};
Dans cet exemple, j'ai 2 frames, une au niveau de la classe qui sera appelée par le destructeur, m'évitant ainsi de devoir maintenir une liste des textures créées. Et une au niveau de la fonction pour détruire la surface qui n'est que temporaire.
Dans ma fonction run_sdl_program(), j'ai plus qu'à faire un new et "defer" le delete de mon texture_manager.
[^] # Re: le defer est pavé de bonnes exceptions
Posté par David Delassus (site web personnel) . En réponse au journal Une 20-aine de lignes de code pour le defer de Go en C++. Évalué à 4.
Un autre exemple qui vaut le coup d'oeil :
Dans cet exemple, j'ai 2 frames, une au niveau de la classe qui sera appelée par le destructeur, m'évitant ainsi de devoir maintenir une liste des textures créées. Et une au niveau de la fonction pour détruire la surface qui n'est que temporaire.
Dans ma fonction
run_sdl_program(), j'ai plus qu'à faire unnewet "defer" ledeletede montexture_manager.https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg