深拷貝和淺拷貝

2021-10-09 02:02:20 字數 398 閱讀 9296

//拷貝函式有兩種:深拷貝 淺拷貝

//當出現類的等號賦值時,會呼叫拷貝函式,在未定義的顯示拷貝建構函式的情況下,系統會呼叫預設的拷貝函式----淺拷貝

//能夠完成成員的複製

//當成員資料中沒有指標時,淺拷貝是可以的,但當資料成員中有指標時,如果採用簡單的淺拷貝,則兩類中的兩個指標指向同乙個位址,

//當物件快結束的時候,會呼叫兩次析構,而導致指標懸掛現象。所以,這時必須採用深拷貝,深拷貝與前拷貝的不同在於

//深拷貝會在堆記憶體中申請空間來儲存資料,從而也就結局了指標懸掛的問題。簡而言之,當資料成員中有指標的時候,必須要用

//深拷貝。

//建議:

//  我們在定義類或者是結構體的時候,最後都重寫拷貝建構函式,避免淺拷貝;這類不宜發現但後果嚴重的錯誤產生。

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...

淺拷貝和深拷貝

以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 例如 已知class a,class b void func a a void func a a func b b 此時函式對b的操作是呼叫拷貝建構函式後的臨時拷貝物件。多數傳指標 乙個物件以值傳遞的方式從函式返回 如 return b...

深拷貝和淺拷貝

ios提供了copy和mutablecopy方法,顧名思義,copy就是複製了乙個imutable的物件,而mutablecopy就是複製了乙個mutable的物件。以下將舉幾個例子來說明。1 系統的非容器類物件 這裡指的是nsstring nsnumber等等一類的物件。nsstring stri...