Wird Speicher einer Map automatisch freigegeben?



  • Hi,

    ich habe

    this->points = new std::map<int, std::vector<double> *>();
    

    Wird der Speicher des vector beim Aufruf

    delete points;
    

    automatisch freigegeben?

    Gruß



  • Nein, da es sich nicht um einen std::vector handelt, sondern nur um einen Zeiger.



  • Ok, eigentlich logisch, danke!


  • Mod

    Ein Zeiger auf eine map und ein Zeiger auf einen vector. Wieso werde ich das Gefühl nicht los, dass du Unsinn machst?



  • Ich vermute, dass es damit zusammenhängt, dass du so was schon häufiger gesehen hast, vorwiegend bei Leuten, die von Java zu C++ kommen. 😉

    curry-king: Zeiger in Containern machen in aller Regel nur dann Sinn, wenn du Laufzeitpolymorphie betreibst. Das ist bei den Containern der Standardbibliothek nicht der Fall; sie eignen sich nicht als Basisklassen (ihnen fehlt ein virtueller Destruktor). Im Zweifel ist es sinnvoller,

    std::map<int, std::vector<double>*> *points;
    

    durch

    std::map<int, std::vector<double> > points;
    

    zu ersetzen. Das sieht dann auch hübscher aus, statt

    (*points)[42]->push_back(3.141);
    
    points[42].push_back(3.141);
    

    schreiben zu können, und die Speicherverwaltung geht vollautomatisch.

    Solltest du irgendwann in die Lage kommen, Zeiger auf Heap-Objekte in Containern verstauen zu müssen, kann ich dir Boost Pointer Container wärmstens empfehlen.


Anmelden zum Antworten