std::map::clear
-
Mahlzeit.
Ich habe ein kleineres Problem mit Memory Leaks. Ich lege Elemente in einer map ab. Die Elemente sind relativ aufwändig zu initialisieren, und Aufrufe wiederholen sich, so daß ich mir die Elemente bei Bedarf hole.
In bestimmten Fällen (neue config-datei, etc.) muss ich jedoch neu anfangen, meine "Objektsammlung" neu anzulegen.
In diesen Fällen habe ich überraschenderweise das Problem, das nicht aller Speicher freigegeben wird. Ich suche gerade nach der Ursache, daher während meiner Nachforschungen die Frage:
Ruft die Map bei Aufruf von "clear" die Destruktoren ihrer Werte / Schlüssel auf, oder nimmt sie nur die Elemente aus der Liste?
-
Hallo,
Hier werden schon die Destruktoren der gespeicherten Objekte aufgerufen. Hast du evtl. Pointer in deiner map? Dann wird natürlich der Destruktor des dahinter liegenden Objektes nicht aufgerufen.
-
Wenn du Zeiger in der Map ablegst wird der reservierte Speicher nicht automatisch freigegeben. Du musst also vor dem "clear" durch die Map iterieren und alles von Hand freigeben.
grüße
-
Hallo
Map (und alle anderen Standard-Container) löscht nur die eigenen Elemente (mit Destruktor), nicht aber Heap-Instanzen. Wenn du also Pointer als Typ verwendest, must du auch selber die Instanzen löschen.
bis bald
akari
-
Danke für das Feedback. Der Fehler lag allerdings woanders...
Ich hatte zwei Maps (warum auch immer - vielleicht hab ich mich mal verschrieben und das nicht gemerkt) - und natürlich habe ich die überflüssige Map "gecleared" und nicht die mit den Daten...