Partage
  • Partager sur Facebook
  • Partager sur Twitter

pointeurs d'objets dans des vecteurs

liberation

Sujet résolu
    15 août 2007 à 14:13:15

    Bonjour,

    j'ai une classe qui contient des pointeurs d'objets regroupés dans des vecteurs,
    j'ai une methode "clear()" qui doit supprimer ses pointeurs, je fais comme ca :

    1. void CBloc_w::clear(void)
    2. {
    3.     for(std::vector<CBloc_w*>::iterator it = m_bloc.begin(); it != m_bloc.end();)
    4.         it = m_bloc.erase(it);
    5.     for(std::vector<CEntree_w*>::iterator it = m_entree.begin(); it != m_entree.end();)
    6.         it = m_entree.erase(it);
    7.     for(std::vector<CBouton_w*>::iterator it = m_bouton.begin(); it != m_bouton.end();)
    8.         it = m_bouton.erase(it);
    9.     for(std::vector<CTexte_w*>::iterator it = m_texte.begin(); it != m_texte.end();)
    10.         it = m_texte.erase(it);
    11. }


    j'aimerais savoir si c'est la bonne facon de faire

    merci
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 août 2007 à 14:18:09

      les vector ont une méthode qui s'appelle "clear", jettes-y un coup d'oeil. Ca t'aidera ;)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        15 août 2007 à 14:18:42

        Tu risques d'avoir pas mal de fuites avec cette méthode, car là tu ne fais que supprimer les pointeurs et pas désallouer les objets pointés:

        1. void CBloc_w::clear(void)
        2. {
        3.     for(std::vector<CBloc_w*>::iterator it = m_bloc.begin(); it != m_bloc.end(); it++)
        4.         delete *it;
        5.     for(std::vector<CEntree_w*>::iterator it = m_entree.begin(); it != m_entree.end(); it++)
        6.         delete *it;
        7.     for(std::vector<CBouton_w*>::iterator it = m_bouton.begin(); it != m_bouton.end(); it++)
        8.         delete *it;
        9.     for(std::vector<CTexte_w*>::iterator it = m_texte.begin(); it != m_texte.end(); it++)
        10.         delete *it;
        11. }


        Tu n'as pas besoin de supprimer chaque élément du vecteur par contre, std::vector s'en charge pour toi à sa destruction ;) .
        • Partager sur Facebook
        • Partager sur Twitter
          15 août 2007 à 14:21:43

          Hello,

          Alors je te le dis tout de suit comme ça, ça ne marchera pas.

          Si tes pointeurs ne sont pas crés via des "new", tu peux utiliser la méthode "clear" de la classe std::vector.
          1. std::vector<*blabla> monVector;//On cree un vector de pointeurs
          2. //Le vector vit plein d'aventures palpitantes
          3. monVector.clear(); //On vide le vector


          Si tu obtients tes pointeurs via des "new" c'est autre chose, mais je pense pas que c'est ce que tu voulais faire puisque tu n'uilises pas de delete dans ton code.

          EDIT: grilled
          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            15 août 2007 à 14:25:19

            Citation : Cyprien_

            Tu risques d'avoir pas mal de fuites avec cette méthode, car là tu ne fais que supprimer les pointeurs et pas désallouer les objets pointés:


            ma classe n'alloue rien, elle ne fais que pointée sur des objets deja créé.

            maintenant je fais comme cela :
            1. void CBloc_w::clear(void)
            2. {
            3.     m_bloc.clear();
            4.     m_entree.clear();
            5.     m_bouton.clear();
            6.     m_texte.clear();
            7. }


            c'est OK ?

            EDIT: ok merci
            • Partager sur Facebook
            • Partager sur Twitter
              15 août 2007 à 22:25:46

              Bof. Regarde la FAQ C++ de developpez.
              • Partager sur Facebook
              • Partager sur Twitter
              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

              pointeurs d'objets dans des vecteurs

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown