Der Aufruf des Destruktors eines Objekts ist fast immer falsch. Tatsächlich bin ich nie auf eine Situation gestoßen, in der das richtig war. Sie müssen sich über RAII und vielleicht diesem Beispiel lesen, wird Ihnen helfen, zu verstehen, warum Sie den Fehler:
#include <iostream>
struct Foo{
Foo() { std::cout << " constructor " << std::endl; }
~Foo() { std::cout << " destructor " << std::endl; }
};
int main(){
Foo foo;
// foo.~Foo(); // <- never ever do this !
} // <- object is destroyed here !
Führen Sie dieses und Sie werden sehen, dass die destructor bereits genannt wird. Das Zerstören eines bereits zerstörten Objekts führt zu dem Fehler, den Sie bekommen.
Sie müssen die Destruktoren nicht manuell so aufrufen. Lokale Objekte werden automatisch am Ende des Bereichs gelöscht: '{Y background (3000, 5000); } 'löscht das Objekt am'} '. – kfsone
_ @ Tarlo_x_ Stoppen Sie herumhüpfen mit rohen Zeigern. Verwenden Sie stattdessen Standardcontainer. –
Und wenn der Lehrer verlangt, dass Sie russisches Roulette mit einer automatischen Pistole spielen? Obwohl ich hinzufügen sollte, sind die Einsätze etwas niedriger mit Zeigern. – user4581301