深複製和淺複製

2021-07-05 11:06:26 字數 620 閱讀 4425

以下**是否完全正確,執行可能得到的結果是__。

1 2

3 4

5 6

7 8

9 10

11 12

13 14

15 class a;

class b

~b()

}; void sayhello(b b)

int main()

程式正常執行

程式編譯錯誤

程式崩潰

程式死迴圈

這個程式會直接崩潰:

voidsayhello(b b)

形參應該為引用型別,否則傳值時會拷貝乙份類物件,淺拷貝

傳入連續刪除多次指標,所以執行時出錯

預設的拷貝建構函式是淺拷貝,直接把指標的值複製了乙份。

呼叫sayhello,離開作用域,呼叫析構函式delete了一次。main函式中,又delete了一次。因此程式崩潰。

正確的黨法:

class a;

class b

~b()

b(const b& other)

}; void sayhello(b b)

int main()

淺複製和深複製

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...

深複製和淺複製

main.m 深複製和淺複製。created by yaomars on 16 4 27.import 建立乙個nsdictionary,並建立可變副本和不可變副本,說下是深複製還是淺複製。int main int argc,const char argv 第三種方式 建立乙個nsdictionar...

深複製和淺複製

複製值型別時,它通常執行深複製,也就是說,它包含的所有值會被遞迴地複製。這種複製可能是在賦值新變數時就發生的,也可能會延遲到變數內容發生變更的時候再發生。執行深複製的型別被稱作具有值語義 value semantics 這裡我們會遇到另一件複雜的事情。如果我們的結構體中包含有引用型別,在將結構體賦值...