Un caso interesante de eliminación y destructor (C ++)
Tengo un código en el que puedo llamar al destructor varias veces y acceder a las funciones de miembro, incluso se llamó al destructor con los valores de las variables de miembro preservados. Todavía podía acceder a las funciones de miembro después de llamardelete
pero las variables miembro fueron anuladas (todas a 0). Y no puedo doblardelete
. Por favor amablemente explique esto.
#include <iostream>
using namespace std;
template <typename T>
void destroy(T* ptr)
{
ptr->~T();
}
class Testing
{
public:
Testing() : test(20)
{
}
~Testing()
{
printf("Testing is being killed!\n");
}
int getTest() const
{
return test;
}
private:
int test;
};
int main()
{
Testing *t = new Testing();
cout << "t->getTest() = " << t->getTest() << endl;
destroy(t);
cout << "t->getTest() = " << t->getTest() << endl;
t->~Testing();
cout << "t->getTest() = " << t->getTest() << endl;
delete t;
cout << "t->getTest() = " << t->getTest() << endl;
destroy(t);
cout << "t->getTest() = " << t->getTest() << endl;
t->~Testing();
cout << "t->getTest() = " << t->getTest() << endl;
//delete t; // <======== Don't do it! Double free/delete!
cout << "t->getTest() = " << t->getTest() << endl;
return 0;
}