STL vector bzw. deque
-
den code habe ich gerafft, danke.
wollte nur noch wissen ob erase das objekt zerstoert.
danke.
-
Was meinst du überhaupt mit "zerstört"? Wenn es im vector nicht mehr drin ist, wo soll es sonst sein? Manuell ~Obj() aufrufen musst du nicht...
-
wolltest du das wissen?
vector vec<objekt>; vec.erase(vec.begin() + index); vector vec<objekt*>; delete vec[index]; vec.erase(vec.begin() + index);
-
erase(iterator), erase(iterator beg, iterator end), clear() etc. rufen keine
Destruktoren auf. Sie entfernen lediglich die Elemente aus dem Vector. Willst du,
dass die Objekte zerstoert werden (im Sinne von 'delete/delete[]') musst du das
selbst machen.mfg
v R
-
Bist du dir da völlig sicher ?
Wenn Pointer drin sind ist es OK. Da ruft erase() kein delete und somit auch keinen Destruktor auf. Wenn aber Klasseninstanzen drin sind (werden ja kopiert) sollte erase() eigentlich den Destruktor dieser Kopie aufrufen.
-
ja was denn nun?
-
das objekt wird zerstört,der speicher steht aber immeroch unter der kontrolle des vectors.
-
kann ich das objekt was mit erase zurueckgeliefert wird nun verwenden oder nicht? Ich denke schon.
Hat jemand vielleicht ne GUTE Url fuer STL-Doku. Die bekannten sind da leider nicht so ausfuehrlich.
danke.
-
Braunstein schrieb:
Bist du dir da völlig sicher ?
Wenn Pointer drin sind ist es OK. Da ruft erase() kein delete und somit auch keinen Destruktor auf.es sei denn, du hast spezielle pointer, also z.b. eine selbst gecodete smart-pointer klasse
Wenn aber Klasseninstanzen drin sind (werden ja kopiert) sollte erase() eigentlich den Destruktor dieser Kopie aufrufen.
jo, erase() haut sie raus und die instanz verliert somit ihren gültigkeitsbereich -> ab in den papierkorb
-
@todo
Da smart_pointer ja Klassen sind, trifft die zweite Aussage doch zu. Es gibt also keinen Widerspruch.@peperonee
Da erase() die Position des nächsten Elementes ausgibt kannst du getrost damit arbeiten.
Die beste Doku die ich kenne ist allerdings ein Buch (N. Josuttis, The C++ Standard Library).