Speicherleck vermeiden



  • Hallo!

    Ich bin gerade dabei ein Art Baum zu erstellen. Als Hilfsmittel nehme ich unter anderem std::vector. Nun habe ich eine Frage bzgl. Speicherlecks bzw. ob bei meinem Code Speicherlecks entstehen. Ich bin der Meinung nicht.

    class CMyData
    {
    // Definitionen
    };
    
    class CBaum : public CMyData
    {
    private:
    
      int m_count; 
      std::vector<CBaum*> m_data;
    
    public:
    
      CBaum * additem(std::string &str)
      {
          CBaum *ptr = new CBaum;
          ptr->name = str;
          this->m_count++; 
          this->m_data.push_back(ptr);
      }
    
      ~CBaum()
       {
           for (int i = 0; i <= m_count; i++)
           {
              delete this->m_data.at(i);
           }
       }
    };
    

    Alle erstellen dybamischen Zeiger von CBaum werden doch über den (jeweiligen) Destruktor wieder gelöscht, richtig?

    Danke und Gruß Klaus.



  • ja, werden sie.

    Du brauchst die anzahl nicht selbst mitzählen, die liefert dir auch vector.size(). Ausserdem kannst du in der delete-schleife auch mit dem operator[] zugreifen, das at prüft hier nur unnützerweise das vorhandensein des elements.

    Und nochwas... der code ist recht unleserlich. this->m_blub ist doppeltgemoppelt. Wenn du eh immer this davorschreibst brauchst du auch die blöde m_-namensgebung nicht mehr.
    aber am besten du lässt gleich beides ganz weg.



  • Wenn du die Klasse "Baum" und nicht "Graph" nennst, solltest Du aber verhindern, dass der Benutzter damit Zyklen erzeugt. Dann funktioniert deine Speicherverwaltung naemlich nicht mehr.



  • Ich nehme alles zurueck!



  • Gunnar_ schrieb:

    Ich nehme alles zurueck!

    Melde dich lieber an.


Log in to reply