在我的代碼中有operator +重載。在此範圍內,我定義了要構建和返回的對象ans
,但似乎析構函數在返回它之前會先破壞ans
,所以此方法返回一些未定義的值。在我完成使用這個對象之前調用destructor來銷燬對象
我不明白我錯在哪裏?它是析構函數,構建器,還是我的operator +超載?
這裏是我的代碼:
class vector1{
int * arr;
int size;
public:
//constructors
vector1(){}
vector1(int n){
size=n;
arr= new int[size];
}
//functions
int get_size(){return size;}
void init(){ //initialize all array cells to 0
for(int i=0;i<size;i++)
arr[i]=0;
}
int get_value_in_index(int index){
return arr[index];
}
void set_value_in_index(int i, int num){
arr[i]=num;
}
int & operator[](int i){
int default_val=0;
if (i<0 || i>size){
cout<<"index not valid"<<endl;
return default_val;
}
return arr[i];
}
vector1 operator+(vector1 & ob);
//destructor
~vector1(){
delete [] arr;
}
};
vector1 vector1:: operator+(vector1 & ob){
vector1 ans(size);
if (ob.get_size()!=size){ //if the arrays are not the same size return array of '0', this array size
cout<<"vectors not the same length. can't sum them"<<endl;
//test
//exit(1);
ans.init();
}
else{
for (int i=0;i<size;i++)
ans.set_value_in_index(i,arr[i]+ob.get_value_in_index(i));
}
return ans;
}
感謝您的時間和幫助。
你違反了[三規則(http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))有蛋糕。 –