C 中智慧型指標的工作原理和簡單實現

2021-06-18 08:27:06 字數 3013 閱讀 7131

1、

這裡的實現有點小問題,不過從原理上比較容易理解,下面的一篇blog也差不多

2、智慧型指標:它的一種通用實現方法是採用引用計數的方法。智慧型指標將乙個計數器與類指向的物件相關聯,引用計數跟蹤共有多少個類物件共享同一指標。

每次建立類的新物件時,初始化指標並將引用計數置為1;

當物件作為另一物件的副本而建立時,拷貝建構函式拷貝指標並增加與之相應的引用計數;

對乙個物件進行賦值時,賦值操作符減少左運算元所指物件的引用計數(如果引用計數為減至0,則刪除物件),並增加右運算元所指物件的引用計數;這是因此左側的指標指向了右側指標所指向的物件,因此右指標所指向的物件的引用計數+1;

呼叫析構函式時,建構函式減少引用計數(如果引用計數減至0,則刪除基礎物件)。

實現智慧型指標有兩種經典策略:一是引入輔助類,二是使用控制代碼類。這裡主要講一下引入輔助類的方法,看下面的例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

classpoint//基礎物件類,要做乙個對point類的智慧型指標

intgetx()const

intgety()const

voidsetx(intxval)

voidsety(intyval)

private:

intx,y;

};

classrefptr//輔助類

~refptr()

intcount;//引用計數

point *p;//基礎物件指標

};

classsmartptr//智慧型指標類

//建構函式

smartptr(constsmartptr &sp):rp(sp.rp)//複製建構函式

smartptr& operator=(constsmartptr& rhs)

~smartptr()

private:

refptr *rp;//輔助類物件指標

};

intmain()

使用該方式的記憶體結構圖如下:

3、介紹的很詳細,先收藏~~

C 智慧型指標原理

智慧型指標 smart pointer 是儲存指向動態分配 堆 物件指標的類,用於生存期控制,能夠確保自動正確的銷毀動態分配的物件,防止記憶體洩露。它的一種通用實現技術是使用引用計數 reference count 智慧型指標類將乙個計數器與類指向的物件相關聯,引用計數跟蹤該類有多少個物件共享同一指...

C 智慧型指標原理

1.c 智慧型指標 2.c 智慧型指標簡單剖析 3.智慧型指標 auto ptr 詳解 4.c 智慧型指標詳解 5.請你介紹一下c 的智慧型指標 牛客網 在c 程式裡,使用new關鍵字開闢的記憶體必須被手動delete掉,不然就會導致記憶體的洩漏,但是,當程式非常冗長,你能保證自己每乙個手動開闢的記...

C 智慧型指標及其原理

智慧型指標介紹 智慧型指標 raii 是利用物件的生命週期來管理資源的技術。raii,resource acquisition is initialization 顧名思義,就是在初始化物件的時候獲取資源,在這個物件進行析構時會幫我們釋放資源,這樣做的好處有很多 不需要顯示的釋放資源 可以避免因為沒...