6Fermer8
ZephLe 23/04/2008 à 11:28
Il y a deux possibilités :

- Soit tu dupliques la zone mémoire pointée quand tu copies un objet de type "Texture", ça coute cher en mémoire mais c'est la solution la plus simple.
- Soit tu utilises un système de pointeurs partagés entre toutes les instances comme ce que tu as essayé de faire, mais à ce moment là il faut te débrouiller pour ne plus avoir d'objet "maitre" sinon quand tu le supprimes ça invalide tous les autres.

Une solution parmi d'autres : (modulo les erreurs éventuelles, je n'ai pas de quoi compiler pour tester)

[edit] tiens j'en profite pour utiliser les super features de mirari que personne n'essaie jamais : http://www.mirari.fr/Ca5b grin

class Texture
{
    public:
        Texture (const char* path)
        {
             this->refCount = malloc (sizeof (*this->refCount)); // compteur partagé du nombre de références sur cette textures
             *this->refCount = 1;

             this->imageData = new char [...];
             // charger l'image "path" dans this->image_data
        }

        Texture (const Texture& texture)
        {
            this->refCount = texture.refCount; // on récupère le compteur partagé pour compter une nouvelle référence
            ++*this->refCount;

            this->imageData = texture.imageData;
        }

        ~Texture ()
        {
            if (--*this->refCount == 0) // si le compteur arrive à 0, alors plus aucun objet ne référence cette texture,
            {
                delete [] this->imageData; // on peut donc l'effacer pour de bon
                free (this->refCount); // sans oublier de supprimer également le compteur
            }
        }

    private:
        char* imageData;
        int* refCount;
}