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
class
point
//基礎物件類,要做乙個對point類的智慧型指標
int
getx()
const
int
gety()
const
void
setx(
int
xval)
void
sety(
int
yval)
private
:
int
x,y;
};
class
refptr
//輔助類
~refptr()
int
count;
//引用計數
point *p;
//基礎物件指標
};
class
smartptr
//智慧型指標類
//建構函式
smartptr(
const
smartptr &sp):rp(sp.rp)
//複製建構函式
smartptr& operator=(
const
smartptr& rhs)
~smartptr()
private
:
refptr *rp;
//輔助類物件指標
};
int
main()
使用該方式的記憶體結構圖如下:
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 顧名思義,就是在初始化物件的時候獲取資源,在這個物件進行析構時會幫我們釋放資源,這樣做的好處有很多 不需要顯示的釋放資源 可以避免因為沒...