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 
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;
}