高手帮小弟我看看, 析够函数为什么不能够正常调用

高手帮我看看, 析够函数为什么不能够正常调用?
Class Object
{
public:
virtual Object(){std::cout<<"Object Created\n";};
}

Class TestA:Object
{
public:
TestA(){std::cout<<"TestA Created\n";};
~TestA(){std::cout<<"Destory TestA\n"};
}


Class TestB:Object
{
public:
TestB()
{
std::cout<<"TestB Created\n";
p = new int;
};
~TestB()
{
std::cout<<"Destory TestB\n"
delete p;
};
private:
int *p;
}

Class TestC
{
public:
TestC()
{
std::cout<<"TestC Created\n";
p = new int;
};
~TestC()
{
std::cout<<"Destory TestC\n"
delete p;
};
private:
int *p;
}


test1()
{
void *pTest = new TestB;
delete (TestA*)pTest;
}

test2()
{
void *pTest = new TestB;
delete (TestC*)pTest;
}

test3()
{
void *pTest = new TestB;
delete pTest;
}

void main()
{
test1();
test2();
test3();
}

请问这3个函数中 哪些会引起内存泄漏? 为什么?


------解决方案--------------------
C/C++ code
#include <iostream.h>

class object  
{  
public:
    virtual ~object(){};  
}; 

class testa:public object  
{  
public:
    testa()
    {
        cout<<"testa created\n";
    } 
    ~testa()
    {
        cout<<"destory testa\n";
    }  
};  


class testb:object  
{  
public:
    testb()  
    {
        cout<<"testb created\n";  
        p = new int;  
    };
    
    ~testb()  
    {
        cout<<"destory testb\n";  
        delete p;  
    };  

private:  
    int *p;  

};  

class testc  
{  
public:
    testc()
    {
        cout<<"testc created\n";
        p = new int;
    }
    ~testc()  
    {  
        cout<<"destory testc\n";
        delete p;  
    };  

private:  
    int *p;  
};  


void test1()  
{ 
    void *ptest = new testb;  
    delete (testa*)ptest;  //1)先调用了~testb(),之后调用了~object
}  

void test2()  
{  
    void *ptest = new testb;  
    delete (testc*)ptest;  //2)调用了~testc(),在执行其中的delete p; 语句时崩溃!
}  

void test3()  
{
    void *ptest = new testb;
    delete ptest; // 3)没有调用析构函数 testb::~testb()
}  

void main()  
{
    test1();  
    test2();  
    test3();  
}

------解决方案--------------------
谁来答案? 偶关注了一天了
------解决方案--------------------
第三个明显有内存泄露,因为不会调用析构,为啥不调析构呢?因为delete掉的是个void*,编译器不知道调谁的析构.
------解决方案--------------------
#include<iostream>
class Object
{
public:
virtual ~Object(){};
} ; 

class TestA:Object
{
public:
TestA(){std::cout<<"TestA Created\n";}
~TestA(){std::cout <<"Destory TestA\n";}
} ; 


class TestB:Object
{
public:
TestB()
{
std::cout <<"TestB Created\n";
p = new int;
};
~TestB()
{
std::cout <<"Destory TestB\n" ;
delete p;
};
private:
int *p;
} ; 

class TestC://Object 
{
public:
TestC()
{
std::cout <<"TestC Created\n";
p = new int;
};
~TestC()
{
std::cout <<"Destory TestC\n";
delete p;

private:
int *p;
} ;


void test1()
{
void *pTest = new TestB;
delete (TestA*)pTest;