c 智慧型指標

2021-09-26 01:58:13 字數 1804 閱讀 7316

智慧型指標:智慧型指標也是模版,在標頭檔案中

shared_ptr:允許多個指標指向同乙個物件。shared_ptrp; 可以指向string型別的智慧型指標。會自動銷毀所管理的物件,還會自動釋放相關聯的記憶體。

unique_ptr:獨佔所指向的物件。

weak_ptr:是一種弱引用,指向shared_ptr所管理的物件。*/

shared_ptrsp;

unique_ptrup;

智慧型指標的操作

p.get:返回p中儲存的指標,若智慧型指標釋放了其物件,返回的指標所指向的物件也消失

p.awap(q):交換p和q中的指標

p.unique:若p.use_count為1,則返回true,否則返回false。shared_ptr獨有操作

p.use_count:返回與p共像物件的智慧型指標數量。shared_ptr獨有操作

make_shared:在動態記憶體中分配乙個物件並初始化它,返回值指向此物件的shared_ptr*/

shared_ptrsp1 = make_shared(77);

auto sp2 = make_shared>();

shared_ptr自動銷毀所管理的物件,當指向乙個物件的最後乙個shared_ptr被銷毀時,shared_ptr會自動銷毀此物件。

是通過析構函式實現的,當引用計數為0時銷毀,還會自動釋放相關聯的記憶體。

直接管理記憶體

使用new動態分配和初始化物件int* p = new int;//可以初始化也可以不初始化

動態分配的const物件,const int* p = new const int(1024);

記憶體耗盡,返回空指標

動態釋放記憶體,delete p;

指標和delete,不是釋放非new建立的記憶體,不能將相同指標值多次釋放

動態物件的生存期直到被釋放時為止

delete之後重置指標值,提供有限的保護。delete p; p = nullptr;

shared_ptr和new的結合

不要混合使用普通指標和智慧型指標

不要使用get初始化另乙個智慧型指標或為智慧型指標賦值*/

unique_ptr操作

u.release:u放棄對指標的控制全,趕回指標,並將u置空

u.reset:釋放u指向的物件

u.reset(q):如果提供了內建指標q,令u指向這個物件,否則置為空

unique_ptr不支援普通的拷貝或賦值操作

當定義乙個unique_ptr時,需要將其繫結到乙個new返回的指標上

unique_ptrunp1(new string("asfg"));

unique_ptrunp2(p1);//錯誤 unique_ptr不支援拷貝

unique_ptrunp3;

unp3 = unp1;// 錯誤 unique_ptr不支援賦值

weak_ptr操作

weak_ptr是一種部控制所指向物件生存期的智慧型指標

w.reset():將w置為空

w.use_count:與w共享物件的shared_ptr的數量

w.expired:若use_count為0返回true,否則返回false

w.lock:如果expired為true,返回乙個空shared_ptr,否則返回乙個指向w的物件的shared_ptr

weak_ptr是一種不控制所指向物件的生存期的智慧型指標,它指向乙個shared_ptr管理的物件。

將乙個weak_ptr繫結到乙個shared_ptr不會改變shared_ptr的引用計數,

就是最後的shared_ptr被銷毀,即使有weak_ptr指向該物件,也會被銷毀。

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 智慧型指標

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