智慧型指標
stl中的智慧型指標auto_ptr
標頭檔案:
auto_ptr ap1(newint(1
));
//初始化正確,建立ap1類模板物件,使類模板裡的指標為int*型,並指向1的位址
int* p = new
int(1
); auto_ptr
ap2(p); //
初始化正確
//auto_ptrap3 = new int(2);
//出錯,不能隱式初始化
auto_ptr ap(newint(1
));
cout
<< ap.get()列印數值1的位址 : 0x6d2d18
int *p =ap.get
(); cout
<< *p列印數值1
auto_ptr p1(newint(1
)); auto_ptr
p2(new
int(2
)); p1 =p2; //
首先會delete p1物件的類成員指標,然後將p2物件的類成員指標賦值給p1, 最後修改p2指標位址為null
cout
<<"
p2 =
"列印 : p2=0
//cout<<*p2出錯,因為p2=0
初探auto_ptr智慧型指標
#include #includeusing
namespace
std;
class
test
~test()
};void func() //
在func函式裡使用auto_ptr
intmain()
執行列印:
*****begin*****test(1)p1 =0x8db1008
test(2)
p2 =0x8db1018
p1=p2
~test(1
)p1 =0x8db1018
p2 =0
~test(2
)*****end*****
從結果可以看到,由於func()的生命週期結束,所以裡面的auto_ptr指標自動就被釋放了。
可以發現在呼叫p1=p2時, 首先會delete p1物件的類成員指標(呼叫~test(1)析構函式),然後將p2物件的類成員指標賦值給p1(p1=0x8db1018), 最後修改p2指標位址為null(p2 =0)。
stl中的智慧型指標shared_ptr(需要c++11支援)
shared_ptr p1(newint(1
)); shared_ptr
p2(new
int(2
)); p1.swap(p2);
//交換後 p1=2,p2=1
cout
<< *p1 列印 2
cout
<< *p2 列印 1
shared_ptr sp1(newint(30)); //
計數+1
cout
列印計數:1
cout
列印:1
shared_ptr
sp2(sp1); //
計數+1
cout
列印:2
cout
由於sp1指標物件被sp2引用,列印:0
sp1.reset();
//將sp1指標物件位址設為null,計數-1
cout
sp1指標物件位址為null,列印:0
cout
列印:1
cout
由於sp1釋放,僅剩下sp2指向30所在的位址,所以列印:1
初探shared_ptr智慧型指標(以上個test類為例分析)
#include #includeusing
namespace
std;
class
test
~test()
};int
main()
執行列印:
*****begin*****test(1)*p1=1, *p2=1
~test(1
)count:
0*****end*****
從結果可以看到,我們把p1和p2都釋放了後,由於count=0,便自動去delete test指標了.
stl中的其它智慧型指標(在後面學習到,再來深入描述)
可以通過t *data()成員函式來獲取指向的位址
-weak_ptr
-unique_ptr
qt中的智慧型指標
-qpointer
-qsharedpointer
-qscopedpointer
示例:
qscopedpointerp1(new qpushbutton);
C 深度解析 27 智慧型指標分析
1.永恆的話題 2.程式設計實驗 include includeusing namespace std class test int value test int main system pause return 0 3.深度的思考 4.智慧型指標分析 include includeusing na...
2 7 C語言基礎
2.7 當乙個表示式中多個資料的型別不一致的時候計算機會首先把它們轉換過程由計算機自動完成,叫做隱式型別轉換 隱式型別轉換過程中會把char和short型別資料轉換成整數型別 如果既有整數型別資料又有浮點型別資料則會把整數型別轉換成浮點型別 如果所有資料的型別不同但所佔空間大小一樣,則吧整數轉換成單...
(27)C 資料封裝
所有的 c 程式都有以下兩個基本要素 名稱含義 程式語句 這是程式中執行動作的部分,它們被稱為函式。程式資料 資料是程式的資訊,會受到程式函式的影響。封裝是物件導向程式設計中的把資料和運算元據的函式繫結在一起的乙個概念,這樣能避免受到外界的干擾和誤用,從而確保了安全。資料封裝引申出了另乙個重要的 o...