I'm designing a class that's wrapper of a 2D array. Anything seems ok, except the destruction function. I don't know why it throws an access violent reading.
I have tried to detect what happened and I still can't solve this problem. I need your help. Thank you.
class ClassA
{
    int Num;
public:
    ClassA()
    {}
    ~ClassA(void)
    {}
};
class ClassB
{
        ClassA* pA;
public:
    ClassB()
    {}
    ClassB(ClassA obj)
    {
        pA = new ClassA[1];
        pA[0] = obj;
    }
    ~ClassB(void)
    {
        delete[] pA;
    }
    ClassB::ClassB(ClassB& src)
    {
        this->~ClassB();
        pA = new ClassA[1];
        pA[0] = src.pA[0];
    }
    ClassB& ClassB::operator =(const ClassB& src)
    {
        if (this == &src)
            return *this;
        this->~ClassB();
        pA = new ClassA[1];
        pA[0] = src.pA[0];
        return (*this);
    }
};
ClassB Test5()
{
    ClassA A;
    ClassB B( A );
    return B;
}
void Test6()
{   
    ClassB B;
    B = Test5();
}
The exception will be thrown after finishing of Test6 function.
 
    