Destruktor und Delete
-
HumeSikkins schrieb:
Lumpensammler schrieb:
Es tut mir leid das ich sie alle mit meinen lästigen Fragen belästige, die ich nicht vermag selber zu lösen. Dachte zwar dafür wäre das Forum da, aber spielt ja auch keine Rolle.
Meine Frage ist geklärt, also könnt ihr diesen Thread schliessen, damit auch niemand mehr auf die Idee kommt seine Zeit hier drin zu verschwenden.Nach deinem ersten Beitrag habe ich mich kurz gefragt ob ich etwas falsch gemacht habe (war ich zu kurz angebunden o.Ä) und ob ich mich entschuldigen müsste. Nach diesem Beitrag weiß ich nun aber, dass du es bist, der scheinbar schwer unter den hohen Temperaturen leidet.
Mein Tipp: Einfach mal ein großes Glas Wasser trinken. Vielleicht siehst du dann, dass dir hier niemand etwas böses will. Ganz im Gegenteil.
-
Irgendwie hat mich Lumpensammler grad an Marvin erinnert
-
Michael E. schrieb:
Irgendwie hat mich Lumpensammler grad an Marvin erinnert
Marvin wer?
-
Aus dem Anhalter.
-
*g*, ich denke niemand muss sich entschuldigen, wenn er/sie hier etwas fragt. Ist ja Sinn des Forums.
Und ich häng' mich hier auch nochmal ran, weil ich dazu noch ne Frage hätte, hoffe ist nicht schlimm.
Wenn ich jetzt einen vector mit Zeigern von Objekten habe, und ich dann mit erase ein Objekt daraus lösche, dann wird das Objekt zerstört? (Hatte ich jetzt so verstanden).
Wie mache ich es dann aber, dass ich den Zeiger aus dem Vector entferne, ohne das Objekt zu zerstören? Muss ich den Zeiger dann erst auf 0 (NULL) setzen und dann aus dem vector entfernen? Bei der Zuweisung mit 0 wird das Objekt ja nicht zerstört, also irgendwie so?
std::vector<MyObject*> vObjects; vObjects.push_back(pObject); vObjects.begin() = 0; vObjects.erase(vObjects.begin());
Oder wird bei der Zuweisung mit 0 das Element evtl. schon aus der Liste entfernt?
Gibt es evtl. eine gute Referenz über die STL, wo auch genau solche Fragen geklärt werden? Kenne die STL eigentlich noch nicht so wirklich.
-
Hier findest du ziemlich viele Informationen zur STL:
http://www.sgi.com/tech/stl/Auf deine Frage kenn ich aber leider keine Antwort.
Lump~
Edit: Achja...ist natürlich nicht schlimm das du dich an meine Thread dran hängst.
-
Wenn ich jetzt einen vector mit Zeigern von Objekten habe, und ich dann mit erase ein Objekt daraus lösche, dann wird das Objekt zerstört? (Hatte ich jetzt so verstanden).
Wenn du einen vector von Zeigern hast, dann sind die Elemente des Vektors natürlich auch nur Zeiger. erase entfernt und zerstört in diesem Fall Zeiger nicht Objekte.
Du hast hier also etwas falsch verstanden.
-
@Lumpensammler: Vielen Dank, ich werd's mir mal anschauen.
@HumeSikkins: k, ich hatte den Post von "net" falsch interpretiert, wo er geschrieben hat, dass es keine Kopie gibt, wenn man nen vector von Zeigern nimmt. Das hat sich irgendwie mit dem automatischen Destruktoraufruf von vector::erase bei Objekten in meinem Hirn vermischt und ich hab' da irgendwie raus gemacht, dass der Destruktor aufgerufen wird, wenn man per erase einen Zeiger aus dem Vektor entfernt.
Danke für die Klarstellung!
Das würde also bedeuten, dass ich dann aber sowas machen müsste, wenn ich das Objekt nun wirklich löschen möchte:
std::vector<MyObject*> vObjects; vObjects.push_back(pObject); delete vObjects[vObjects.begin()]; // Objekt löschen, Destruktor-Aufruf, etc., gespeicherter Zeiger wird auf 0 gesetzt. vObjects.erase(vObjects.begin()); // Zeiger aus dem vector entfernen
Das ist jetzt aber richtig, oder? Plz habt Nachsicht.
-
delete vObjects[vObjects.begin()];
Das geht nicht. Der Operator[] erwartet einen ganzzahligen Wert keinen Operator. Richtig wäre:
delete vObjects[0];
oder auch:
delete *vObjects.begin();
-
hm, ok, muss mich wohl noch intensiver damit beschäftigen.
Danke auf jeden Fall. Ich denke, jetzt ist es einigermaßen klar.