定义类的指针变量如何重载类的拷贝构造函数和重载=号

#ifndef LIST_OPRATOR
#define LIST_OPRATOR
#include
using namespace std;
class Complex
{
private:
int a;
char* p;

public:
void operator=(Complex* c2);
Complex(const Complex* c2);
Complex(int a,char* m);
~Complex()
{
cout<<"析构"<<" "<<p<<endl;
delete p;
p=NULL;//避免野指针
a=0;
};

};
#endif
Complex::Complex(int a,char* m)
{
this->a=a;
p=new char[strlen(m)+1];
strcpy(p,m);
}

Complex::Complex(const Complex* c2)
{
p=new char[strlen(c2->p)+1];
if(c2->p!=NULL)
{
strcpy(p,c2->p);
}
a=c2->a;
}

void Complex::operator=(Complex* c2)
{
if(p!=NULL)
{
delete p;
p=NULL; //避免野指针
}
if(c2->p!=NULL)
{
p=new char[strlen(c2->p)+1];
strcpy(p,c2->p);
}
a=c2->a;
}
void main993()
{

Complex* c1=new Complex(1,"abcd");
Complex* c2=c1;
Complex* c3=new Complex(2,"lkjh");
c2=c3;
delete c1;
delete c2;
delete c3;
system("pause");
}

void main()
{
main993();
}

delete c3时就down掉来,分布调试时没有进入任何重载函数,求解指针对象的重载如何实现

c2等于c3,所以delete c2就可以了,不需要delete c3。

c2是指向c1, 不能用delete。