Mam pytanie dotyczące czasu istnienia destruktora w klasie.
Do moich testów stworzyłem kod:
#include <iostream> #include <vector> using namespace std; class Klasa; std::vector <Klasa *> tab; class Klasa { public: int x; void foo() { delete this; } Klasa(){ x = 5; } ~Klasa() { cout<<"Niszczenie... x = "<<x<<endl; } }; int main() { for(std::size_t i = 0;i<3;i++) tab.push_back(new Klasa); tab[1]->foo(); cout<<"tab[1]->x wynosi: "<<tab[1]->x<<endl<<endl; cout<<"Destruktory:"<<endl; for(std::size_t i = 0;i<3;i++) delete tab[i]; return 0; }
I zauważyłem pewien problem: mimo, że usunąłem obiekt (przez delete this) jego destruktor nadal żyje (spodziewałem się crashu aplikacji(odwołanie do nieistniejącego obiektu)), lecz składowe klasy są już inne.
Moje pytanie brzmi:
Czy używając delete this zwalniam pamięć oraz dlaczego destruktor nadal "żyje"?