?
Opikividi schrieb:
Die Zeile mit
flugzeugschleife[i-1].~airplane();
war für mich nur ein Test, um am Ende zu sehen, welches Objekt zuerst abgebaut wird. Das Problem liegt vielmehr in meiner while-Schleife. Dort werden mehr Objekte erzeugt, als ich eigentlich brauche und dann gleich wieder zerstört ->Sinn? Ich hab keine Ahnung wie ich das angestellt habe, aber ich glaube, dass hängt mit der Vektor-Funktion zusammen.
*seufz*
Ok, du hast glaube ich völlig mißverstanden was für einen Zweck der Destruktor hat. Irgendwie scheinst du anzunehmen, das ein Objekt (in dem Fall ein "airplane") zerstört wird, wenn du den Destruktor aufrufst. Es ist andersrum. Nicht "Destruktor wird auferufen => Objekt wird zerstört" sondern "Objekt wird zerstört => Destruktor wird aufgerufen".
Um mal auf deinen konkreten Fall einzugehen: Ja, ein vector erstellt und zerstört hin und wieder Objekte. Vorallem dann, wenn er größer wird. Neuen, größeren Speicher anfordern -> Alte Objekte in neuen Speicher kopieren (mit copy-ctor) -> Alte Objekte aus altem Speicher entfernen (was dann den Destruktor aufruft).
Wenn du das Objekt, das an letzter Stelle im vector ist, zerstören willst, mach btw einfach
flugzeugschleife.pop_back();
. Dann ist das Flugzeug auch tatsächlich weg. Und falls du nur Informationen übers Flugzeug willst, schreib dir eine info-Funktion, die Daten übers Flugzeug ausgibt, und ruf die auf. So ziemlich alles bloß nicht den Destruktor. Dafür ist er nicht da, der hat seine eigene Aufgabe.
Ich bin mir übrigens nicht ganz sicher, ob das folgende wirklich das macht, was du glaubst.
for(i=0;i<5;i++) flugzeugschleife[i].anzeigen();
flugzeugschleife[i-1].~airplane();
Das ist reines Glück, dass das hier nicht direkt abstürzt - oder schlimmeres. Der Grund warum es funktioniert, ist das
flugzeugschleife[i-1]
das "i" nimmt, das du hier
short flugnummer=1256,sprit=400,typ=747,i=0;
erstellt und hier
while(i<5){
/...
i++;
}
auf 5 erhöht hast.