Um caso interessante de exclusão e destruidor (C ++)
Eu tenho um pedaço de código onde posso chamar o destruidor várias vezes e acessar funções-membro, mesmo que o destruidor tenha sido chamado com os valores das variáveis-membro preservados. Ainda consegui acessar as funções de membro depois que ligueidelete
mas as variáveis de membro foram anuladas (todas para 0). E eu não posso dobrardelete
. Por favor, explique isso.
#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;
}