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!
-
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.