當我們對類或者結構體進行賦值操作的時候,會呼叫拷貝建構函式,這時會涉及到淺拷貝和深拷貝的問題。
一、淺拷貝:
所謂淺拷貝就是對資料成員進行簡單的一一拷貝,因此,對於指標變數也只是拷貝了指標本身,當拷貝完成之後,兩個指標會指向同一塊記憶體,所以當呼叫兩次析構函式的時候,該記憶體會被釋放兩次,從而造成指標懸空的問題。
二、深拷貝:
相比於淺拷貝,深拷貝會開闢一塊新的記憶體空間,用於存放拷貝的指標所指資料,因此,拷貝完成之後,兩個指標指向的是兩塊記憶體,裡面存放相同的資料。
當我們沒有自定義拷貝建構函式的時候,會自動呼叫預設的拷貝建構函式,這時進行的是淺拷貝,因此,習慣上都要重寫拷貝建構函式。
C 之深拷貝 淺拷貝
關於拷貝的錯誤 對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。以下有乙個學生類 執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,這會導致什麼問題呢?name指標被分配一次記憶體,但是程式結...
C 之深拷貝 淺拷貝
什麼是拷貝建構函式?通過拷貝物件的方式建立乙個新的物件,拷貝建構函式的引數必須是類物件的引用,也就是將乙個物件拷貝給另乙個新建的物件 用途,在建立物件的時候,使用同一類之前建立的物件來初始化新建立的物件 book book b 必須是引用的原因是,如果是傳值方式將實參傳遞給形參,中間要經歷乙個物件的...
C 深拷貝 與 淺拷貝
最近在寫一些c 程式,遇到個問題,記憶體會出錯,查了一些材料,終於發現問題所在了,原來碰到了傳說中的深拷貝和淺拷貝問題了,檢視一些材料,現在對這個問題做個總結 在類定義中,預設是淺拷貝,即 位拷貝 用在基本類中或者一些沒有指標的自定義型別中沒有一點問題,但是當遇到含有指標變數的自定義型別的時候,就會...