#include<iostream>using namespace std;class CAT{int * itsAge;public:CAT():itsAge(new int(5)){}CAT(const CAT& s){cout<<"copy"<<endl;int itsage;if(itsAge){*(this->itsAge) = *s.itsAge; }}~CAT(){delete itsAge;}int GetAge() const {return *itsAge;}void SetAge (int age){*itsAge=age;}};int main(){CAT frisky;cout<<"frisky's age:"<<frisky.GetAge()<<endl;cout<<"Setting frisky to 6...\n";frisky.SetAge(6);cout<<"Creating boots from frisky\n";CAT boots(frisky);cout<<"frisky's age:"<<frisky.GetAge()<<endl;cout<<"boot's age:"<<boots.GetAge()<<endl;cout<<"setting frisky to 7...\n";frisky.SetAge(7);cout<<"frisky's age:"<<frisky.GetAge()<<endl;cout<<"boots' age:"<<boots.GetAge()<<endl;}
1 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
复制构造函数没有为itsAge分配空间
同样也没有被itsAge分配初始值
导致itsAge在执行复制构造时为随机值
对随机值地址赋值 导致程序崩溃
修改为
CAT( const CAT& s){ cout<< "copy" <<endl; int itsage; //if(itsAge){*(this->itsAge) = *s.itsAge; } itsAge = new int (*s.itsAge); } |
添加回答
举报
0/150
提交
取消