Suppression d'une instance de classe avec patron

jeanlandercy Messages postés 9 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 mars 2005 - 5 mars 2005 à 17:18
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008 - 6 mars 2005 à 14:40
Bonjour,

Je découvre avec joie les patrons de classe. J'ai dans l'idée de créer un patron de maillon pour liste. La conception, c'est ok, mais la suppression c'est pas opérationnel.
Je m'explique...

Je crée un maillon générique du genre:

template <class T> class Maillon {
public:
T Objet;
};

Puis une classe de mon imagination pour l'encapsuler dans mon maillon:

class MaClasse {
public:
int info;
};

Ensuite, lorsque je suis dans mon programme, je crée une nouvelle instance (dynamique) avec le patron Maillon dans lequel j'encapsule MaClasse:

Maillon<MaClasse> * monPointeur = new Maillon<MaClasse>;

Jusque là tout se déroule à merveille. Puis, lorsque l'idée me viens de supprimer l'instance dynamique, j'utilise le mot clé delete.

delete monPointeur;

Ce qui ne génère aucune erreur de compilation, et ne semble pas générer d'erreur d'exécution. Seulement, voilà, je suis maniaque et je teste si mon instance existe toujours et là horreur, l'objet dynamique existe toujours et on peut le manipuler correctement. Ce qui a le mérite de m'énerver un peu beaucoup !!!

Comment fait-on pour supprimer cette instance dynamique ? J'ai déjà cherché sur Internet sans trouver de réponse concluante.

Il y a quelque chose de que je dois ignorer et que j'espère l'un de vous sait...

Merci d'avance pour vos futures réponses.

Landercy Jean

16 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 mars 2005 à 18:32
Essaie sans les partons et tu verra que tu auras le même problème. Cela
dit je n'explique pas non plus cela. Voila un exemple complet qui
montre le problème:




#include 

using namespace std;



template <class T> class Maillon {

  int n;

public:

  void f();

  Maillon();

  ~Maillon();

};



template<class T> Maillon<T>::Maillon()

{

  n = -12;

}



template<class T> Maillon<T>::~Maillon()

{

  cout << "destroy" << endl;

}



template<class T> void Maillon<T>::f()

{

  n++;

}



int main()

{

  Maillon* m = new Maillon;

  delete m;

  m->f();

  return 0;

}





Après le delete, on a toujours le droit de modifier m->n (qui chez moi à été modifié pendant le delete).
0