Ich gehe davon aus, dass MyArray eine solche Struktur haben wird.
class MyArray{
public:
int* arr;
int len;
MyArray(int l){
arr = new int[l];
len = l;
}
~MyArray(){
delete [] arr;
}
};
Jetzt ein Szenario, wo es 2 Objekt von MyArray
MyArray ob1(3);
for(int i=0; i<3; i++)
ob1[i]=i*i; // ob1 = {0, 1, 4}
MyArray ob2(3);
for(int i=0; i<3; i++)
ob2[i]=i+1; // ob2 = {1, 2, 3}
Wenn wir nun ob1 = ob2
tun; Der Compiler würde arr1 auf arr2 zeigen, also wenn Ob2 geändert wird, um {4,5,6} zu sagen, dann wird Ob1 auch zu {4,5,6}, dies wird flache Kopie genannt. Um dieses Szenario zu vermeiden, müssen wir dieses Add
MyArray& operator=(const MyArray& rhs){
for(int i=0; i<rhs.len; i++) this.arr[i] = rhs[i];
}
Nun, wenn oB 2 geändert wird ob1 nicht betroffen, weil wir das Array auf unseren eigenen nicht der Zeiger copy.So diese aufgerufen wird tiefe Kopie kopiert haben. Dies ist eines der wichtigsten Szenarien, in denen = überlastet ist.
'rhs' ist nur Parametername. –