2010-02-17 3 views
3

J'ai récemment commencé à utiliser SFML et j'ai remarqué qu'il n'y avait pas de méthodes de type «FreeResource». Par exemple, sf::Font a une fonction appelée LoadFromFile, mais aucune fonction pour libérer la ressource. Je pensais que c'était très étrange. Est-ce que je manque quelque chose? Est-ce que ma seule option est de créer un pointeur sf::Font et de l'allouer dynamiquement et de le supprimer?SFML Releasing Resources

+2

Je ne connais pas SFML. Mais considérons un 'std :: vector'; avez-vous besoin de libérer manuellement ces ressources? Non, c'est fait dans le destructeur. Je soupçonne la même chose pour vous. Notez que l'avoir sur la pile n'est pas différent, sur le plan du comportement, que 'new' et ensuite' delete'. (Sauf que maintenant votre code est moins sûr.) Cela s'appelle RAII. – GManNickG

+0

Parfois, nous avons besoin du même type de ressource dans le même contexte, mais une instance différente. Si j'ai un 'sf :: Texture' qui doit être plus grand, je ne peux pas simplement le redimensionner: je dois le 'supprimer' puis le' créer (...) 'un nouveau. – Litty

Répondre

6

sf::Font stocke ses données de police dans un std::map appelé myGlyphs (voir le source). Quand le destructeur de Font est appelé, tout le contenu de cette carte sera automatiquement libéré (par le destructeur std::map).

Questions connexes