Интересный случай удаления и деструктора (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;
}

Ответы на вопрос(5)

Ваш ответ на вопрос