#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個贊
復制構造函數(shù)沒有為itsAge分配空間
同樣也沒有被itsAge分配初始值
導致itsAge在執(zhí)行復制構造時為隨機值
對隨機值地址賦值 導致程序崩潰
修改為
CAT( const CAT& s){ cout<< "copy" <<endl; int itsage; //if(itsAge){*(this->itsAge) = *s.itsAge; } itsAge = new int (*s.itsAge); } |
添加回答
舉報
0/150
提交
取消