Vektoren un Destruktoren
-
Ruft std::vector beim Löschen (erase) und kompletten Löschen (clear) die Destruktoren der Elemente auf?
Danke.
-
Kurze Frage - kurze Antwort: Ja.
-
Danke CStoll.
Wenn der Vektor aus seinem Gültigkeitsbereich fällt, ruft er dann auch die Destruktoren seiner Elemente auf, bevor er sich vernichtet?
-
Ja, macht er.
(PS: Wenn du's nicht glaubst, schau ihn dir doch an - alle beteiligten Methoden findest du im Header <vector>)
-
Ahaaaaaaa...
Hätte ich auch selber draufkommen können
Die nächste Frage wäre jetzt nämlich gewesen, woher ihr alles wisst.
-
vud schrieb:
Die nächste Frage wäre jetzt nämlich gewesen, woher ihr alles wisst.
Aus den Headern abgeleitet

(OK, ehrlich: Es gibt da einige Leute, die schlaue Bücher zu diesen Themen geschrieben haben)
-
Viele Möglichkeiten das zu wissen: ausprobieren, durchsteppen, Leute fragen...
-
Vorsicht, wenn du Zeiger statt Objekte in dem vector speichert, musst du jedes einzelne Objekt über den Zeiger deleten, wenn der Vector der Aggregator ist!
-
BorisDieKlinge schrieb:
Vorsicht, wenn du Zeiger statt Objekte in dem vector speichert, musst du jedes einzelne Objekt über den Zeiger deleten, wenn der Vector der Aggregator ist!
Was zu der wichtigen Erkenntnis führt, dass der "Aufruf eines Destruktors" nicht dassebe ist wie "delete eines Pointers" (sondern Ersteres durch Zweiteres ausgelöst werden kann).
Gruß,
Simon2.
-
Deswegen sollte man ersters berücksichtigen, damit zeites Eintritt..... wenn man einen Pointer Vector hat..
-
BorisDieKlinge schrieb:
Deswegen sollte man ersters berücksichtigen, damit zeites Eintritt..... wenn man einen Pointer Vector hat..
Neee - man sollte Zweiteres durchführen, damit Ersteres geschieht (und sowieso der Speicher des Objekts freigegeben wird) ... :p

Gruß,
Simon2.
-
mein ich ja, verwirrend wenn zweitens vor erstens kommt:)
-
Man sollte einfach keine std::vector<T*> haben wenn man Ownership damit ausdrücken will.