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"?