vector in vector löschen



  • Angenommen, ich habe dieses Konstrukt:

    class Tag
    {
    public:
    	Tag(): name( _T("") ) {}
    
    	CString name;
    	std::vector<CString> tv;
    };
    
    class Form
    {
    public:
    	Form() : title( _T("") ) {}
    
    	CString title;
    	std::vector<Tag> fv;
    };
    
    Form my_form;
    

    Muß ich außer

    my_form.fv.clear();
    

    auch für jedes fv-Element

    my_form.fv[i].tv.clear();
    

    aufrufen, oder erledigt daß der Form-destructor automatisch?

    my_form wird in einem thread immer wieder gefüllt, geparst, gelöscht.

    Vielen Dank für eure Hilfe.



  • Hier wird alles korrekt aufgeräumt, wenn du das meinst. Aufpassen musst du, wenn du Speicher per new oder malloc anforderst, da du den dann wieder mit delete freigeben musst.



  • Erstmal danke, drakon.

    Das ist schon seltsam: ich habe das tool außerhalb von VStudio laufen lassen (debug mode) und es hat nach ca. 300 beendeten threads 40 mb normalen und 340 mb virtuellen Speicher benötigt.

    Es passiert nicht innerhalb der Entwicklungsumgebung (ca. jeweils 4-5 mb) und memory leaks hab' ich auch keine.

    Recht seltsam. :?:



  • Kann sein, dass das vom Debug herkommt. Aber der Code sieht korrekt aus. Weiss ja nicht, was du da sonst noch so machst. 😉



  • Der Speicher muss nicht unmittelbar ans Betriebssystem zurückgegeben werden. Deshalb sind Schlussfolgerungen über den TaskManager auf Memory Leaks oder ähnliches etwas heikel. Falls du dir ganz unsicher bist, kannst du ja immer noch Speicher-Überwachungstools einsetzen.

    Aber wenn du eine vernünftige STL-Implementierung hast, wird alles sauber aufgeräumt (vorausgesetzt, der von dir verwendete Elementtyp räumt sich ebenfalls auf, falls nötig). Bei std::vector wird der allokierte Speicher normalerweise erst im Destruktor freigegeben.


Anmelden zum Antworten