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