• [^] # Re: Oui mais non

    Posté par . En réponse au journal ADN overflow : c'est de la faute de l'open source. Évalué à 3.

    parfois c'est un peu plus que juste un free, mais c'est assez rare

    Mais ce n'est pas un problème: avec unique_ptr tu peux spécifier la fonction à utiliser pour libérer la ressource.
    Bon, ok, ça transforme un pointeur léger (même taille qu'un pointeur brut) en pointeur lourd (stockage de l'@ du destructeur en plus de l'@ de la donnée) et c'est pénible à utiliser, mais ça fonctionne.
    Ceci dit, je regrette très fortement que unique_ptr soit si pénible à utiliser avec des pointeurs C et ajoute un overhead alors qu'il aurait été possible de l'éviter (en passant le nom du destructeur en Template, et non en paramètre du constructeur: ça aurait évité d'utiliser un pointeur supplémentaire inutile et ça aurait rendu la chose bien plus simple à utiliser!).

    Un quick & dirty, (détournement d'outils standard, à éviter) :

    tu peux facilement faire un objet qui prends une fonction en paramètre et l'exécute en sortie de bloc

    Hum... je vois pas la valeur ajoutée par rapport à:

    #include <memory>
    #include <SDL/SDL.h>
    int main()
    {
     SDL_Init(SDL_INIT_VIDEO);
     std::unique_ptr<SDL_Surface,void(*)(SDL_Surface)> surf(nullptr,SDL_FreeSurface);
    }

    Bon, ça compile probablement pas, mais l'idée est là.
    Les bouts de code sur lesquels tu pointes me semblent bien complexes pour... je ne sais pas quoi, je dirai rien mais j'imagine qu'il y a quelque chose que je n'ai pas tilté :D