Etwas trat in meinem Programm, und ich kann nicht finden, wenn es geschehen ist oder nicht angenommen hat. Und wenn es ist, sehe ich nicht, warum ..Warum wird der Destruktor beim Initialisieren und Ändern der Größe eines Objektvektors aufgerufen?
Hier ist der Code:
#include <iostream>
#include <vector>
using namespace std;
class A{
public:
A();
~A();
};
A::A(){
cout << "creating" << endl;
}
A::~A(){
cout << "deleting" << endl;
}
int main(void){
vector<vector<A > > vec;
vec.resize(5);
for(int i = 0; i < 5; ++i){
vec[i].resize(5);
}
cout << "END" << endl;
return 0;
}
Und hier ist der Ausgang:
creating
deleting
creating
deleting
creating
deleting
creating
deleting
creating
deleting
END
deleting
deleting
[..more deleting here]
Ich verstehe, warum der destructor nach dem genannten " ENDE "Nachricht, aber vorher, ich nicht. Ich dachte, dass wenn der Vektor die Größe ändert, der Konstruktor der Klasse aufgerufen wird, aber warum der Destruktor?
Sie haben vergessen, die Ctor Kopie vom Benutzer definiert werden. Wenn Sie (mit Ausgabe) und nach jedem Aufruf eine Ausgabe auf resize() setzen, werden Sie sehen, was passiert. –