Bonjour à tous,
je travail actuellement sur un moteur 3D directX10 mais mon problème vient d'une notion de C++ qu'il doit me manquer.

J'essaie de permettre à l'utilisateur de créer autant d'instances d'un objet(mesh) qu'il le souhaite, la solution qui m'est venue en tête de prime abord est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
     vector<sphere> mSph;
     mSph.push_back(sphere()); //a chaque appui sur une touche
     mSph.back().init(); //initialise les propriétés de ma sphere
Ce code fonctionne uniquement si dans le destructeur de ma classe sphere
je commente le code qui permet de libérer le vertex buffer, l'index buffer et le textureBuffer, dans le cas contraire j'ai un erreur d'accès en mémoire dès le push_back de mon objet anonyme dans le vecteur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
	SAFE_RELEASE(mVB);
	SAFE_RELEASE(mIB);
	SAFE_RELEASE(textureBuffer);
Si je commente ces lignes j'ai un gros problème de fuite mémoire au véritable moment ou j'ai besoin de libérer ces objets car le destructeur ne sert plus à rien et des Mo de texture, de VB et d'IB s'empilent dans la mémoire sans être libérés. Néanmoins une fois ces lignes commentés le programme fonctionne tout à fait correctement et crée les sphères dynamiquement.

J'aimerais savoir pourquoi le destructeur est-il appelé à l'instanciation?
De plus le SAFE_RELEASE est sensé prévenir contre les risques d'accès en mémoire puisque le release n'est réalisé que si l'objet existe réellement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Exception non gérée à 0x012ff911 dans x.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xcccccccc.
Merci par avance !