Bonjour;

J'essai de cleaner un programme que je réutilise
Fait par deux entreprises Une CMM4 l'autre CMM5.
Cependant je trouve des scories que je ne résoud pas.
Quand je passe dans le destructeur, le compilateur génère le code de destruction des objets déclarés au niveau de l'objet sur lequel pointe le destructeur.
Je met l'exemple du code initial à disposition pour comprendre: voila la partie Déclaration de l'objet. Il y a donc deux listes de crée et le compilateur à l'appel du destructeur va générer un code qui détruira les listes. et il se plante dans la detruction de la deuxième liste

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
class CNgramer
{
  private:
    enum enCNramerMethod
    {
      SEARCH_NGRAMS =1,
      DELETE_NGRAMS,
    };
    std::list<std::wstring> wsListTrim1;
    std::list<std::wstring> wsListTrim2;
Je précise que j'ai supprimé l'appel du programme pour ce test et qu'on est dans un cycle constructeur destructeur sans autre code appelé et donc on peut juger que les données n'ont pas été perverties par d'autres codes.
J'ai donc codé un destructeur qui détruit explicitement les deux listes et ce code qui marche parfaitement sur la première se plante comme la précédente sur la deuxième
il y a sept termes dans la 1° liste et deux dans la deuxième liste

voici le code du destructeur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CNgramer::~CNgramer()
{
   std::list<std::wstring>::iterator it;
   it = wsListTrim1.begin();
   while( it != wsListTrim1.end())
   {
      std::wstring *pStr;
      pStr = &(std::wstring)*it;
      delete pStr;
      it++;
   }
   delete &wsListTrim1;
   it = wsListTrim2.begin();
   while( it != wsListTrim2.end())
   {
      std::wstring *pStr;
      pStr = &(std::wstring)*it;
      delete pStr;
      it++;
   }
   wsListTrim2.clear();
   delete &wsListTrim2;
}
Puis je déduire que la destruction réussie des données de la deuxième liste exclue une perversion dans ces données ou dois-je chercher dans cette direction?