淺拷貝帶來的問題以及用深拷貝解決方案

2021-10-08 18:53:23 字數 1079 閱讀 5776

*

*//淺拷貝帶來的問題**

#include

using

namespace std;

class

person

person

(const person& a)

//自己其實不需要寫拷貝建構函式,因為c++編譯器會自動幫你寫

//但是如果屬性有在堆區開闢的,就一定要自己寫,防止淺拷貝帶來的重複delete同一塊堆區記憶體的問題

~person()

//預設析構函式

cout <<

"析構函式"

<< endl;

}private

:int age;

//年齡

int* shengao;

//身高};

void

test01()

//括號法

intmain()

執行結果:https:

20200802154617639.png?x-oss-process=image/watermark,type_zmfuz3pozw5na**pdgk,shadow_10,text_ahr0chm6ly9ibg9nlmnzzg4ubmv0l3fxxzqznjgwnduz,size_16,color_ffffff,t_70

執行結果分析:

1.有參、普通建構函式 //person p1(10,160);執行結果

2.有參、拷貝建構函式// person p2(p1);執行結果

析構函式 //test01整段**執行完畢後釋放p2,呼叫析構函式(先進後出,後進先出,所以是先釋放p2)

然後報錯 //淺拷貝是p1和p2的int *shengao指向的是同一塊堆區記憶體,p2釋放後已經delete了該塊記憶體

//這裡p1釋放,又要去delete該塊記憶體,所以報錯了

**解決方案*

*//用深拷貝在堆區新開闢一段記憶體來儲存即可避免重複delete同一塊堆區記憶體

```cpp

person

(const person& a)

~

深拷貝和淺拷貝問題

下午遇到乙個關於乙個表的數值拷貝的問題,有點意思,不多說,直接上 記錄玩家的資訊 self.userinfo for i 1,play count do table.insert self.userinfo,self.deskuserlist getuserbydeskstation i 1 end...

深拷貝的 淺拷貝講解以及示例

含義 假設b複製了a,當修改a時,看b是否會發生變化,如果b也跟著變了,說明這是淺拷貝,如果b沒變,那就是深拷貝。關於棧堆,就要了解基本資料型別與引用資料型別,因為這些概念能更好的讓你理解深拷貝與淺拷貝 let a 0,1,2,3,4 b a console.log a b true a 0 1 c...

Python中的淺拷貝以及深拷貝

python中資料型別 不可變資料物件 不可變指的是資料儲存到記憶體後無法進行修改。python中的不可變資料型別有 int float str tuple bool 可變資料型別 可變指的是資料儲存後可以進行修改。python中的可變資料型別有 list dict set 表示 print 修改前...