求助吗,关于拷贝构造函数出错的问题!

#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;
}

catspeake
浏览 205回答 1
1回答

缥缈止盈

复制构造函数没有为itsAge分配空间同样也没有被itsAge分配初始值导致itsAge在执行复制构造时为随机值对随机值地址赋值 导致程序崩溃修改为&nbsp;CAT(const&nbsp;CAT&&nbsp;s){&nbsp;&nbsp;cout<<"copy"<<endl;&nbsp;&nbsp;int&nbsp;itsage;&nbsp;&nbsp;//if(itsAge){*(this->itsAge)&nbsp;=&nbsp;*s.itsAge;&nbsp;}&nbsp;&nbsp;itsAge&nbsp;=&nbsp;new&nbsp;int(*s.itsAge);&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP