Интересный случай удаления и деструктора (C ++)
У меня есть фрагмент кода, где я могу вызвать деструктор несколько раз и получить доступ к функциям-членам, даже если деструктор был вызван с сохраненными значениями переменных-членов. Я все еще мог получить доступ к функциям-членам после того, как я позвонилdelete
но переменные-члены были аннулированы (все до 0). И я не могу удвоитьdelete
, Пожалуйста, объясните это.
#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;
}