我試圖瞭解在此代碼中返回引用的目的是什麼?僅僅是因爲返回引用比複製要快得多,還是有其他更重要的東西?參考返回賦值運算符
class Container
{
public:
int Elems;
int * data;
Container(int n):Elems(n){data=new int[Elems];}
Container operator= (const Container &rhs);
};
Container & Container:: operator= (const Container & rhs)
{// I deleted the & and I can still compiled and make such things (a=b=c)
if(this!=&rhs)
{
if(data!=NULL)
{
delete [] data;
}
Elems=rhs.Elems;
data=new int[Elems];
for(int i=0;i<Elems;i++)
data[i]=rhs.data[i];
}
return *this;
}
感謝您的relpy,但我Coult瞭解您的答案的一部分。「默認複製此類的實例將導致多個實例共享相同的數據成員,並且可能會導致多次刪除。我的意思是如果我不能寫&那裏,當我刪除c對象中的部分數據時,它也通過b和一個對象刪除? –
如果你用一個指向已分配內存的成員編寫一個類,則必須小心指針永遠不會泄漏或被雙重刪除。通常這意味着您需要定義析構函數和複製構造函數以及operator =()。如果你沒有定義一個拷貝構造函數(你不這樣做,那是一個賦值函數),那麼你會得到一個默認拷貝構造函數,它可以逐位拷貝對象;那麼你會有兩個對象都指向相同的'數據'數組,最終會導致雙重刪除(或者泄漏,如果沒有刪除數組)。 –
抱歉錯誤的解釋假設有析構函數和複製構造函數,我沒有寫他們,因爲我只是想知道我的代碼的這部分,但你說得對,我應該解釋這一點。 –