Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Die Klasse Vector

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.06.2006, 15:45 Uhr
~JoKl
Gast


Hallo,
ich habe eine kurze Frage:

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?

Vielen Dank im Voraus

Gruß
Jochen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.06.2006, 15:47 Uhr
Spacelord
Hoffnungsloser Fall


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.06.2006, 15:54 Uhr
~JoKl
Gast


Erstmal vielen Dank für die schnelle Antwort.
Also meine Konstruktion ist in etwa so:


C++:
class Klassenname{
...
}

class VectorKlasse{
vector<Klassenname> *vectorname;
}

...
void VectorKlasse::insertIntoVector(){
Klassenname neuesObjekt;
vetorname->push_back(neuesObjekt);
}

void VectorKlasse::clear(){
vectorname->clear
}



Reicht in diesem Fall das clear aus?

Gruß
Jochen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.06.2006, 15:58 Uhr
Spacelord
Hoffnungsloser Fall


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.06.2006, 17:24 Uhr
mike
Pinguinhüpfer
(Operator)


@~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

lg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.06.2006, 17:51 Uhr
Spacelord
Hoffnungsloser Fall


@mike:
Jetzt verwirrst du ihn aber etwas

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.06.2006, 21:09 Uhr
mike
Pinguinhüpfer
(Operator)


@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
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: