首先 ,我們寫這樣一段**:
class
good
;a good1;
a good2 = good1;
編譯器不會報錯,但是在執行階段會出錯。我們就可以猜測,是系統給我們提供了一種函式,讓語法不出錯,但是在執行的時候條件不滿足無法執行。
那麼這種函式的核心就是:用乙個已經存在的物件來生成乙個相同型別的新物件,這也正是&的作用
&的作用
1.不加&,那麼程式就會陷入遞迴呼叫,當物件傳遞進去後,會發生:
const good rhs = good1;
這行**是傳遞形參的過程,在這個過程中,又要生成新的形參物件,所以又要呼叫拷貝建構函式,便又會發生:
const good rhs = good1;
遞迴呼叫一直到棧溢位。
2.&還有一種用法叫「別名」:
int a =10;
int&b = a;
這不間接的符合了拷貝函式的核心思想了嗎
3.還有人提出來了,為什麼不用指標?
如果使用指標,我們傳遞引數時會這樣:
good good2 =
&good1;
傳遞的就是物件的位址,不符合拷貝建構函式的核心思想了。 C 中淺拷貝與深拷貝的詳解及其作用介紹
目錄 淺拷貝 shallow copy 只是對指標的拷貝,拷貝夠兩個指標指向同乙個記憶體空間.深拷貝 deep copy 不但對指標進行拷貝,而且對指標指向的內容進行拷貝.經過深拷貝後的指標是指向兩個不同位址的指標.同類物件之間可以相互賦值.物件賦值的一般形式 物件名1 物件名2 舉個栗子 inzm...
python 中的拷貝 淺拷貝與深拷貝
0.序列指什麼?序列型別是指容器內的元素從0開始的索引順序訪問,一次可以訪問乙個或者多個元素,包括字串 string 元組 tuple 列表 list the difference between tuple and list tuple would not be changed,but list ...
JS中淺拷貝和深拷貝的使用,深拷貝實現方法總結
1 淺拷貝 兩個物件經過拷貝後雖然具有相同的屬性,但是他們都指向同乙個記憶體空間。操作會引起引用,同一位址的變數一起改變。let a let b a b.x 2 console.log b console.log a 2 深拷貝 兩個物件除了拷貝了一樣的屬性,沒有任何其他關聯 指向不同的記憶體空間 ...