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.