輸出結果:
root@txp-virtual-machine:/home/txp# g++ test.cpp
root@txp-virtual-machine:/home/txp# ./a.out
t1.i = 2, t1.j = 3, t1.p = 0xb0a010
t2.i = 2, t2.j = 3, t2.p = 0xb0a030
注解:從打印的p地址空間來看,就知釋放的兩個對象的堆空間不同,不再是指向同一堆空間了;同時我們發現淺拷貝只是簡單數值上的進行賦值而已;深拷貝不只是簡單的值賦值,而是從內存的角度來看,是操作不同的內存。
5、什么時候需要進行深拷貝?
(1)對象中有成員指代了系統中的資源
成員指向了動態內存空間
成員打開了外存中的文件
成員使用了系統中的網絡端口
注意:一般來說,自定義拷貝構造函數(也就是我們自己手寫的),必然需要實現深拷貝!
二、總結:
C++編譯器會默認提供構造函數
無參構造函數用于定義對象的默認初始化狀態
拷貝構造函數在創建對象時拷貝對象的狀態
對象的拷貝有淺拷貝和深拷貝兩種方式。