Bonjour, je suis actuellement en train de développer une application dans le cadre de mes études et je souhaiterais gérer proprement la mémoire.
Ayant déjà réalisé auparavant un système de caching de ressource, je suis en train de légèrement l'adapter pour SFML. En effet, principalement composé d'une map contenant des weak_ptr comme valeurs, ceux-si sont créer lors de l'ajout d'une ressource. La fonction qui ajoute ma ressource ainsi que le getter me renvoi un shared_ptr afin de maintenir en memoire la ressource contenu dans le cache tant que celle-ci est utiliser par un shared_ptr. Lorsque plus aucun shared_ptr ne l'utilise, celle-ci est détruite.
Mon problème est le suivant:
Imaginons que je stocke les différentes textures/images que j'utilise, jusque la tout va bien.Là où cela commence à ce gâter est lorsque je veux utiliser ces ressources. En effet, par exemple, si je veux utiliser une texture et l'associé à un sprite, le shared_ptr ne sera pas utilisé car sprite prend en paramètre une texture par reference et donc lorsque je quitterai ma fonction, celui-ci sera détruit et du même temps provoquera la destruction de la ressource du cache.
Du code étant peut être un peu plus parlant ,en voici:
Class Bouton{
Private:
sf::Sprite sprite;
Public:
Bouton(std::string file){
Cache<Texture> ct; //le cache contient des attributs static
std::shared_ptr<Texture> s=ct.get(file);//je récupéré la texture
sprite.setTexture(s.get())//je définie la texture utilise par le sprite
}//fin de la fonction -> le shared_ptr est détruit, le compteur étant à 0 -> destruction de la ressource contenu dans le cache
//(le pointeur dans sprite ne comptant pas car c'est un pointeur classique)
};
Si vous avez des idées, je suis preneur
(P.S: l'intérêt du cache est de détruire la ressource lorsque celle-ci n'est plus utilisé. Une map d'unique_ptr (à la place de weak_ptr) n'est donc pas vraiment une bonne solution :S )