[Solved]Mehrfacher Destruktoraufruf für dasselbe Objekt?
-
Guten Abend.
Bei einem kleinen Testprogramm das ich geschrieben
habe, stoße ich gerade auf ein unerklärliches Phänomen.
Erstmal der simple Code:#include <iostream> #include <vector> using namespace std; class Test { public: Test(int number=0) : number(number) { cout << "\tKonstruktor " << number << endl; } ~Test() { cout << "\tDestruktor " << number << endl; } private: int number; }; int main() { vector<Test> container; cout << "Fülle Container" << endl; for(int i=0; i < 3; i++) { container.push_back(Test(i)); cout << endl; } cout << "Container voll" << endl; return 0; }Und nun die Ausgabe die mich so verwirrt
(compiliert ohne Optimierung mit dem g++-4.1)Fülle Container Konstruktor 0 Destruktor 0 Konstruktor 1 Destruktor 0 Destruktor 1 Konstruktor 2 Destruktor 0 Destruktor 1 Destruktor 2 Container voll Destruktor 0 Destruktor 1 Destruktor 2Wie man deutlich sieht werden bei jedem neuen Objekt
im vector die bereits vorhandenen zerstört.
(was mich bei push_back auch nicht wundern würde,
wenn auch wieder der Konstruktor aufgerufen wird)Im Endeffekt wird also das Objekt Nummer 0, 4 mal zerstört!
Kann jemand das bei einem anderen Compiler nachvollziehen?
Ist dieses Verhalten irgendwie erklärbar?
Ist es gar standardkonform?
-
Beim push_back werden Kopien erzeugt, du loggst aber den Kopierkonstruktor nicht mit. Klar, dass das dann komisch aussieht.
-
Ohhh

Und ich zermahl mir hier das Hirn was da vor sich geht.Man manchmal hat man einfach ein Brett vor dem Kopf.
Danke
