|
|
发表于 2012-11-26 09:30:12
|
显示全部楼层
副本构造器调用operator==函数,该函数delete prt的时候,prt还是个野指针,所以报错.一个简单的改法如下:- #include <iostream>
- class Test
- {
- public:
- Test(int *x);
- Test(const Test &x);
- ~Test();
- Test &operator=(const Test &x);
- protected:
- int * prt;
- };
- Test::Test(int *x)
- {
- std::cout<<"进入构造器"<<std::endl;
- prt = x;
- std::cout<<"离开构造器"<<std::endl;
- }
- Test::~Test ()
- {
- std::cout<<"进入析构器" <<std::endl;
- std::cout<<'*'<<prt<<'='<<*prt<<std::endl;
- std::cout<<"离开析构器" <<std::endl;
- }
- Test &Test::operator=(const Test &x)
- {
- if(this==&x)
- std::cout<<"不能向同一个地址复制"<<std::endl;
- else
- {
- delete prt;
- prt=new int(*x.prt);
-
- }
- return *this;
- }
- Test::Test(const Test &x)
- {
- std::cout<<"进入副本构造器"<<std::endl;
- prt = new int(0);//加上这行
- *this=x;
- std::cout<<"离开副本构造器"<<std::endl;
- }
- int main()
- {
- Test a(new int(50));
- Test c=a;
- }
复制代码 |
|