Myclass &Myclass::operator=(const Myclass &rhs)这个是赋值运算符的重载,这个实现没错,但是它执行的前提是调用该函数的对象已经被初始化过(即this->ptr有意义)。
接着,你的问题出在:
Myclass::Myclass(const Myclass &rhs)
{
cout<<"进入副构造器"<<endl;
*this=rhs;
cout<<"离开副构造器"<<endl;
}
拷贝构造函数调用了赋值运算符,此时this->rhs并未初始化,这样,赋值运算符里的 delete ptr;会报错。
简单的解决办法,是利用ptr为0时,delete ptr不会报错这一基本事实,将拷贝构造函数改为:
Myclass::Myclass(const Myclass &rhs):ptr(0)
{
cout<<"½øè븱11ÔìÆ÷"<<endl;
*this=rhs;
cout<<"àë¿a¸±11ÔìÆ÷"<<endl;
}
即增加对ptr成员的初始化列表就OK