[edit] cross, mais comme on a des propositions différentes je laisse
Comme ton code de nettoyage est toujours le même, tu devrais pouvoir le factoriser assez facilement. Par contre c'est une solution qui ne s'applique pas si chaque étape ajoute une nouvelle action de nettoyage en cas d'échec. Bon, je me permets de virer les accolades pour les corps d'instruction d'une seule ligne parce que j'aime pas
// Create the button texture (transparent) and set it as render target
m_Texture = SDL_CreateTexture(Game::get()->renderer(), px, SDL_TEXTUREACCESS_TARGET, width, height);
if (m_Texture == nullptr)
throw Exception(ERROR_SDL_STR);
if (SDL_SetTextureBlendMode(m_Texture, SDL_BLENDMODE_BLEND) != 0
|| SDL_SetRenderDrawColor(Game::get()->renderer(), 0, 0, 0, 0) != 0
|| SDL_RenderClear(Game::get()->renderer()) != 0
|| SDL_SetRenderTarget(Game::get()->renderer(), m_Texture) != 0)
{
cleanup();
throw Exception(ERROR_SDL_STR);
}