Reicht der Aufruf "vectorname->clear()" aus, um alle Objekte, die im Vektor gespeichert sind, zu löschen? Oder wird nur die Referenz auf die Objekte entfernt, so dass ich den speicher für jedes einzelne Objekt noch manuell wieder freigeben muss?
Das kommt darauf an was du im vector gespeichert hast. Wenn du darin Zeiger auf dynamisch belegten Speicher ablegst wird dieser Speicher nicht freigegeben-----> Smartpointer!
Bearbeitung:
Aber nicht std::auto_ptr! Dieser Smartpointer ist für vectoren etc. denkbar ungeeignet!
Gruss Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.Dieser Post wurde am 03.06.2006 um 15:50 Uhr von Spacelord editiert.
Ja. Für alle im vector abgelegten Elemente wird der Destruktor aufgerufen. Probleme hättest du nur mit nem vector<Klassenname*> weil dann einfach nur die Zeiger gelöscht werden ohne den dynamisch allozierten Speicher der dahinter steht freizugeben. Das Beste was imo für diesen Fall momentan zur Verfügung steht ist boost::shared_ptr und die Smartpointer der Loki Lib.
Gruss Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
@~JoKl: clear löscht dir deine Elemente - aber der allokierte Speicher bleibt dennoch gleich - d.h. wenn du ma 1000 elemente gepusht hast und clear aufrufst sind dennoch 1000 Elemente noch im Speicher "reserviert". Da hilft nur Dekonstruktor des Vektors aufrufen oder swap
@Spacelord: Mit der STL verwirr ich mich selbst auch immer Das mit dem Löschen ist da einwenig komisch - aber sicher nicht Nachteilig - denk ich mal --