cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 26 janv. 2009 à 19:01
salut
c'est typiquement un problème dont tu peux te débarrasser définitivement avec le code que je viens de publier, utilisation d'une classe de smart pointer
tu aurais
smart_ptr pB = new B;
smart_ptr p2B = pB;
Makazasky
Messages postés6Date d'inscriptiondimanche 25 janvier 2009StatutMembreDernière intervention26 janvier 2009 26 janv. 2009 à 05:32
Jvais donner plus d'infos.... J'ai une classe (A) ayant un pointeur vers un objet d'une autre classe (B), cette objet sera nécessairement créer avec l'opérateur new, et la seule référence vers cette object provient de la classe A ... donc dans le destructeur de la classe A, je détruit l'objet B.
Tout fonctionne bien sauf lorsque j'utilise 2 objet A and que je décide que ces 2 objet A utiliserons le même objet B.
Le premier object A sera détrui correctement, par contre, le second non : le destructeur tentera de faire un delete sur un objet déja détruit (l'objet B).
Le problème c que ca fait carrément planter le programme... y a t-il une facon de vérifier si l'object est valide avant de faire un delete.... ou tout simplement de faire un sorte que le programme plante pas...
Makazasky
Messages postés6Date d'inscriptiondimanche 25 janvier 2009StatutMembreDernière intervention26 janvier 2009 26 janv. 2009 à 16:53
oui, une fois que l'objet B sera détruit, il ne sera plus utilisé, sauf par le destructeur.
par exemple:
CObjectA a1;
CObjectB a2;
a1.b = a2.b;
//fin
//'lobjet a2 est supprimer ainsi que son objet b
//l'objet a1 est supprimer ansi que son objet b = plantage