IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

destruction d'un objet


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 54
    Points : 29
    Points
    29
    Par défaut destruction d'un objet
    j'ai reprogrammé la fonction récursive que l'on peut voir sur ce fil :http://www.developpez.net/forums/sho...d.php?t=140810

    de manière à ce qu'elle soit non récursive. Le problème est qu'il faut créer soi-même la file (ou pile, ou ce qu'on veut...) et par conséquent créer des objets "Etat" afin de les stocker provisoirement en mémoire pour pouvoir travailler sur eux par la suite :

    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
     
    void ContaminationBis::contamine(int x, int y, std::vector<std::vector<int>>& populus)
    {
        std::vector<Point *> stack;
        stack.insert(stack.begin(), new Point(x,y));
        Point* courant;
        while(!stack.empty())
        {
            courant = stack.back();
            stack.pop_back();
     
            if(populus[courant->x][courant->y]!=0 && populus[courant->x][courant->y]!=2)
            {
                populus[courant->x][courant->y] = 2;
                if(courant->y-1>=0 && populus[courant->x][courant->y-1]!=2)
                    stack.insert(stack.begin(),new Point(courant->x, courant->y-1));
                if(courant->x-1>=0 && populus[courant->x-1][courant->y]!=2)
                    stack.insert(stack.begin(),new Point(courant->x-1, courant->y));
     
                ...
            }
        }
    Vu que je fais de nombreux new Point(...) je veux qu'à la fin d'une itération le noeud courant sur lequel je travail soit supprimer de la mémoire sinon je vais vite la saturer. Comment dois-je faire ? je ne connais pas l'utilisation des destructeurs, est-ce que c'est ce qu'il faut les utiliser ou rien à voir?, et si c'est le cas, comment les utilise t'on ?

    merci d'avance

  2. #2
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 237
    Points : 283
    Points
    283
    Par défaut
    A chaque fin de programme les destructeurs des objets sont appellés. (dans une classe ils sont sous la forme : ~NomDeLaClasse() )

    Lorsque l'on crée des objets dynamiquements (ie. avec new) On obtient un pointeur sur l'objet.
    A le fin du programme le destructeur du pointeur est appellé donc le pointeur est détruit mais pas la valeur pointée. C'est une perte de mémoire. Il faut donc détruire l'objet pointé par le pointeur en utilisant delete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int * P = new int (5);
    // suite du programme...
    delete P;
    Pour un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int * P = new int [5];
    // suite du programme...
    delete [] P;

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    merci

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut!!

    Pourquoi tu ne fais pas simplement une stack de Point au lieu de Point*, comme ça pas de new et pas de delete à faire... c'est "plus mieux"... non ?

    et puis sur les stack, tu as push_back() et pop_back() pour les manipuler je crois... non ? plutôt que insert
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    je suis obligé de faire des new nan ?, comment créer l'objet Point autrement qu'en faisant un new ?

    j'utilise insert parce que l'algorithme necessite que les nouveaux points soient insérés en tête de la file or j'ai pas trouvé de méthode du style : push_front...

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    je suis obligé de faire des new nan ?, comment créer l'objet Point autrement qu'en faisant un new ?
    On n'est pas en Java ici
    new va allouer de la mémoire sur le free store et y construire ton objet, il faudra un delete pour le détruire.
    Si tu n'utilises pas new ton objet sera construit sur la pile et sera détruit automatiquement en fin de portée (ici la fin de l'appel à insert).

    j'utilise insert parce que l'algorithme necessite que les nouveaux points soient insérés en tête de la file or j'ai pas trouvé de méthode du style : push_front...
    Ca m'étonne que tu puisses le faire d'ailleurs, une pile étant de type LIFO, tu ne devrais avoir comme fonctions que push() et pop(), sans possibilité d'insérer des éléments ailleurs.
    D'ailleurs si ce que tu veux est une file (FIFO), c'est std::queue.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 54
    Points : 29
    Points
    29
    Par défaut
    seulement, je n'utilise pas une pile en dépit du nom que j'ai donné à mon objet, c'est FIFO, c'est ce dont j'ai besoin pour mon algo, mais je peux le renommer si ça pose des problèmes de lisibilité !

    par contre ma question est (vu que je suis ultra novice en C++) comment on crée un objet autrement qu'en faisant "new" ???

    merci d'avance

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par akrobat
    seulement, je n'utilise pas une pile en dépit du nom que j'ai donné à mon objet, c'est FIFO, c'est ce dont j'ai besoin pour mon algo, mais je peux le renommer si ça pose des problèmes de lisibilité !
    justement, le type stack propose des LIFO, pas des FIFO... donc il faut que tu changes le type (pas le nom, ça on s'est fout) de ta variable pour queue

    Citation Envoyé par akrobat
    par contre ma question est (vu que je suis ultra novice en C++) comment on crée un objet autrement qu'en faisant "new" ???
    en déclarant une variable de ce type, ou en appelant directement le constructeur...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  9. #9
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Swoog, prenons par exemple le bout de code suivant,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    fonction LireFichier {
     
      for (int i=0 ; i < nb_maillage ; i++) {
      MG_MAILLAGE *mai = fichier.get_mg_maillage(i);
     
      /* Extraire noeuds */
      for (unsigned int j = 0 ; j < mai->get_nb_mg_noeud() ; j++) {
           MG_NOEUD * no = new MG_NOEUD(*mai->get_mg_noeud(j));
           coord.push_back(no);
      }
      m_glCanvas->PushNoeuds(&coord);
      coord.clear();
    }
    Est-ce qu'il faudrait que je fasse un delete explicite de mai???

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    pour mai ça dépend de la fonction get_mg_maillage
    pour les éléments de coord (enfin, ceux qui à la fin du code sont dans m_glCanvas) il faudra en faire un oui... (car utilisation de new)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  11. #11
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Hum... je suis un peu confus sur la façon de m'y prendre. Par exemple, où devrait être mon delete!? Et il s'agit d'un delete sur no ou sur le vecteur?!


    Ou dans le destructeur de m_glCanvas je devrai parcourir mon vecteur et faire un delete?!

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    en fait, je viens de voir, tu récupère un pointeur sur coord...

    ça dépend de ce que tu fais de ce pointeur... il faudrait avoir le détail des fonctions...

    en général, tout les valeurs qui sont renvoyées par new (donc des pointeurs) doivent être soumis à delete....
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  13. #13
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Donc je devrais faire par exemple

    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
    fonction LireFichier {
     
      for (int i=0 ; i < nb_maillage ; i++) {
      MG_MAILLAGE *mai = fichier.get_mg_maillage(i);
     
      /* Extraire noeuds */
      for (unsigned int j = 0 ; j < mai->get_nb_mg_noeud() ; j++) {
           MG_NOEUD * no = new MG_NOEUD(*mai->get_mg_noeud(j));
           coord.push_back(no);
           delete no;
     
      }
      m_glCanvas->PushNoeuds(&coord);
      coord.clear();
    }

  14. #14
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    non, car à ce moment, le pointeur inséré dans coord deviendrait invalide...

    est-ce que ta classe MG_NOEUD est copiable ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  15. #15
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Le hic c'est qu'avec le delete ca fonctionne tjrs?

    Je suis un peu confu (encore) avec les references/pointeurs la...
    Si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MG_NOEUD* no = new MG_NOEUD(*mai->get_mg_noeud(j));
    coord.push_back(no);
    Je push_back une copie du pointeur.
    Donc après lorsque je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_glCanvas->PushNoeuds(&coord);
    J'envoie la référence du vecteur coord, qui contient les copies des pointeurs.

    Et je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void GL_MAILLAGE::PushNoeuds(const std::vector<MG_NOEUD*> * noeuds) 
    { 
    coord_noeuds.push_back(*noeuds); 
    }
    Pourquoi ca fonctionne toujours si j'ai fait le delete?!

  16. #16
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ça fonctionnera jusqu'à que tu essaie d'accèder à un des noeuds que tu as libéré à ce moment là, tu va modifier n'importe quoi, il n'y aura peut-ête même pas d'erreur d'exécution qui feront planté l'application, mais tu vas modifier les variabes qui occuperont cet espace mémoire s'il a été réalloué au lieu de tes noeuds (qui n'existeront plus), d'où des resultats qui peuvent être très inattendus...


    en fait, ton code est assez problèmatique, quelle est la portée de coords ? (où est-il déclaré ?)

    si ta classe MG_NOEUD est copiable (ne contient que des objets copiables ou alors a un constructeur par copie et une opérateur d'assignation qui se chargent de faire les manipulations pour duppliquer les éléments non-copiables) alors tu n'as pas besoin de t'embêter avec des pointeurs
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  17. #17
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    coord est déclaré dans la fonction de lecture de fichier
    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
    void MyFrame::readFile(const std::string &filepath) 
    {
    std::vector<MG_NOEUD*> coord; 
    for (int i=0 ; i < nb_maillage ; i++) {
       MG_MAILLAGE *mai = fichier.get_mg_maillage(i);
     
      /* Extraire noeuds */
      for (unsigned int j = 0 ; j < mai->get_nb_mg_noeud() ; j++) {
             MG_NOEUD* no = new MG_NOEUD(*mai->get_mg_noeud(j));
             coord.push_back(no);
       }
       m_glCanvas->PushNoeuds(&coord);
       coord.clear();
    }
    Dans ma classe GL_MAILLAGE (objet m_glCanvas) je push_back dans un vecteur avec la fonction PushNoeuds

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<std::vector<MG_NOEUD*> > coord_noeuds
    Je me sert ensuite de ce vecteur pour dessiner en OpenGL des points.

    Tant qu'a à classe MG_NOEUD, elle est déclarée comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MG_NOEUD(unsigned long num,MG_ELEMENT_TOPOLOGIQUE* topo, double xx=0.,double yy=0.,double zz=0.);
    MG_NOEUD(MG_ELEMENT_TOPOLOGIQUE* topo,double xx=0.,double yy=0.,double zz=0.);
    MG_NOEUD(MG_NOEUD& mdd);




    EDIT: Après avoir étudier plus en profondeur, ce que je fais est correcte tant que je ne fais pas les delete. (En faisant les delete tu as raison ca peut ammèner de gros problèmes).

    Ce que j'ignore est, comment aller faire le delete (dans le destructeur?) sur ce quoi pointe "no". Puisque le new a été fait à l'intérieur d'une fonction.

  18. #18
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    alors...

    là encore, tu utilises les pointeurs dans le constructeurs de MG_NOEUD...

    il faudrait savoir ce que tu fait de ce pointeur topo, est-ce qu'il doit rester alloué même si l'objet MG_NOEUD est détruit ?

    en même temps, tu as un constructeur par copie...

    il faudrait, pour plus de sûreté, un opérateur d'assignation (operator=) et un destructeur : si tu as besoin d'un constructeur par copie, il est possible que tu ais besoin de ces deux là...

    en voyant plus comment tu manipule coords, tu en fait une copie, donc de ce côté, le problème disparait, cependant, tu ferais mieux de le faire passer par référence constante que par adresse... ça éviterais le quiproquos...
    ne faire passer une variable par adresse (pointeur) que si on a BESOIN de son adresse (ici, tu as juste besoin de sa valeur )

    dans ce cas là...

    en fait, tu devra faire le delete
    au moment où tu retires un vector de coord_noeuds, il faut faire un delete sur chacun des éléments de ce vector, à moins que tu ne transvase les pointeurs à un endroit où tu en as encore la trace et l'utilité...

    les problèmes sont :
    si le delete est fait trop tôt : pointeurs fantômes
    si le delete est fait trop tard ou pas du tout : memleak (tu ne libère jamais la mémoire allouée, la mémoire reservée pour ton programme va grossir inutilement au fur à mesure que ton programme tournera...)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  19. #19
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Voilà de judicieux conseils.

    Donc voici mon plan d'action:

    • Passer le vecteur en référence au lieu de son adresse
    • Faire les delete au moment ou je fais mes "clear" (L'utilisateur charge un nouveau fichier) et également dans le destructeur (lorsque l'utilisateur quitte l'application)
    Question cependant:
    Mon vecteur: std::vector<std::vector<MG_NOEUD*> > coord_noeuds

    Je devrai donc:

    Parcourir ce vecteur de vecteur
    1. Aller à chacun des vecteur à l'intérieur avec un itérateur
    2. Pour chaque vecteur, les parcourir
    3. À chaque itération, faire le delete


    J'y suis ou pas du tout ???

  20. #20
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par vdumont
    Je devrai donc:

    Parcourir ce vecteur de vecteur
    1. Aller à chacun des vecteur à l'intérieur avec un itérateur
    2. Pour chaque vecteur, les parcourir
    3. À chaque itération, faire le delete


    J'y suis ou pas du tout ???
    Tu y es exactement, cependant, garde bien à l'esprit qu'il ne te faut faire cette opération sur un vecteur que quand les noeuds qu'il contient deviennent périmés ou inutiles, c'est-à-dire que tu ne les utilisera plus par la suite : ni en lecture, ni en écriture...

    et tu ne peux faire qu'un seul delete sur un objet, il te faut donc bien le faire quand tu le dois... pas trop tôt, ou trop tard

    si ton code et ta modélisation son clairs, ce point devrait être facil à trouver
    n'oublie qu'il est possible que certains pointeurs survivent jusqu'à la fin de l'existence de coords_noeud, dans ce cas, il faudra penser à les libérer, etc...

    test toutes les voies que peuvent prendre tes pointeurs alloués avec new...

    il faut que toutes ses voies débouchent soit sur un delete, soit sur la fermeture de l'application, il ne faut pas qu'elles se perdent dans un état indéterminé
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

Discussions similaires

  1. [c#]Comment forcer la destruction d'un objet précédemment créé?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/07/2009, 14h29
  2. Réponses: 2
    Dernier message: 13/10/2007, 01h55
  3. [C#] destruction d'un objet
    Par legillou dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/06/2006, 11h19
  4. Réponses: 1
    Dernier message: 09/07/2005, 18h16
  5. Réponses: 14
    Dernier message: 02/03/2005, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo