• [^] # Re: le defer est pavé de bonnes exceptions

    Posté par (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 :

    class texture_manager {
     private:
     new_defer_frame();
     SDL_Renderer *m_renderer;
     public:
     texture_manager(SDL_Renderer *renderer) : m_renderer(renderer) {}
     SDL_Texture *load(const char *asset_path) {
     defer_frame __; // pour pas shadow celle définie au niveau de la classe
     auto surface = IMG_Load(asset_path);
     if (surface == nullptr) {
     throw std::runtime_error(IMG_GetError());
     }
     __.defer([&]() { SDL_FreeSurface(surface); });
     auto texture = SDL_CreateTextureFromSurface(m_renderer, surface);
     if (texture == nullptr) {
     throw std::runtime_error(SDL_GetError());
     }
     defer({ SDL_DestroyTexture(texture); });
     return texture;
     }
    };

    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.

    https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg