C 智慧型指標

2021-10-06 06:56:23 字數 1176 閱讀 9508

1、智慧型指標的原理

程式通常通過堆來儲存動態分配的物件(程式執行時的物件),當動態物件不在使用時,需要對他們進行銷毀。動態記憶體的管理是通過new delete來實現的。

new運算子:在動態記憶體中為物件分配一塊空間並返回乙個指向物件的指標

int

*p=new(2

);//*p初始化為2

int*p1=

new[

100]

;//申請100個單位的記憶體空間

delete運算子:指向乙個動態物件的指標,摧毀物件並釋放與其相關聯的記憶體。在delete之後,指標變成了懸空指標(指向一塊曾經儲存資料物件但現在已經無效的記憶體位址)。要想避免懸空指標,需要在delete之後將nullptr賦值給指標變數,這樣就清楚指標不指向任何物件了

delete p;

p=nullptr

;

2、c++中提出了智慧型指標

智慧型指標就是對普通指標進行封裝,其實質是乙個物件。使用類來封裝資源的分配和初始化,在建構函式中完成資源的清理,可以保證正確的初始化和資源釋放。

智慧型指標包含在標頭檔案memory

包含shared_ptr、unique_ptr、auto_ptr、weak_ptr

shared_ptr:是一種強引用指標,允許多個指標指向相同的物件。每個shared_ptr都會有乙個計數器與之相關聯,通常稱之為引用計數

shared_ptr<

int> p;

//空,可以指向型別為t的物件

shared_ptr<

int> p=make_shared<

int>(5

);//使用make_shared函式來初始化

shared_ptr<

int>p(

newint(2

));//傳入指標通過建構函式來初始化

//拷貝賦值

shared_ptr<

int> p2=make_shared<

int>(6

);shared_ptr<

int>

p2copy

(p2)

;//p2copy是p2的拷貝,此操作會遞增p2的引用計數

p3=p2;

//給p3賦值,會遞增p2的引用計數

c 智慧型指標

auto prt 它是 它所指向物件的擁有者 所以當自身物件被摧毀時候,該物件也將遭受摧毀,要求乙個物件只有乙個擁有者,注意 auto prt 不能使用new 來分配物件給他 include include using namespace std template void bad print au...

c 智慧型指標

很久沒寫部落格了,不知道如何表達了,哈哈.我先介紹一下深淺拷貝.class copy 此時a.ptr和b.ptr指向同乙個物件,當我們delete a.ptr時 b.ptr所指向的物件已經不存在了,要是我們引用b.ptr指向的物件也就會出問題了.深拷貝 把a.ptr所指向的物件拷貝乙份給b.ptr ...

c 智慧型指標

記得前不久有一次面試被問到智慧型指標的實現,當時對智慧型指標只是聽說但沒有了解過,就亂七八糟地說了一遍。今天寫了一遍智慧型指標,用了引用計數的概念。主要思想就是,用乙個新類對原本需要的型別進行了一層封裝,這個新類中儲存了原本的物件指標和乙個引用計數的指標,之所以全部用指標來儲存,就是因為會出現多個新...