bon, autant le dire tout de suite, j´ai pas *tout* saisi à ta démarche :-?
virer les données que t´as chargées à la main pour créer ta texture, c´est sans risque, à partir du moment où OpenGL en a sa propre copie.
" l´objet est bon tant que rien ne call le destructeur. Ainsi, je ne veux pas faire un delete[]"
je saisis pas le lien :-?
Dans tous les cas, le malloc ou ::operator new ou new [] de taille zero est absolument IGNOBLE. Un tableau ne peut PAS avoir une taille nulle : d´ailleurs si tu testes ton pointeur apres un new [0] tu constateras qu´il est invalide.. Si si...
La manière de procéder usuelle :
dans ta classe, t´as un pointeur, disons :
CHAR *m_pData;
dans le ctor, on l´init ou le fixe à NULL :
MyClass::MyClass() : m_pData(NULL)
{
}
dans le dtor, on le delete SI il est valide :
- define SAFE_DELETE(p) { if ( p) { delete ( p): ( p) = NULL; } }
MyClass::~MyClass()
{
SAFE_DELETE(n_pData);
}
comme ça, aucune risque et c´est propre
La méthode est la meme avec des new/delete []
ensuite, si tu as besoin de savoir si tu objet contient des infos valides, il te suffit d´implementer une méthode en ce sens, ex :
BOOL MyClass::isValid() const
{
return m_pData ! = NULL;
}
Enfin, pour améliorer le design global, tu peux masquer tout ça en créer un TextureManager ou dans le style ; en gros, un singleton qui charge des textures à la demande, gère leur durée de vie, et integre un systeme d´indexation ( pour éviter le chargement multiple d´une meme texture, ou pour les trier en vue du rendu, etc.)