27 C 智慧型指標

2021-09-07 17:48:13 字數 3275 閱讀 5636

智慧型指標

stl中的智慧型指標auto_ptr

標頭檔案:

auto_ptr ap1(new

int(1

));

//初始化正確,建立ap1類模板物件,使類模板裡的指標為int*型,並指向1的位址

int* p = new

int(1

);  auto_ptr

ap2(p); //

初始化正確

//auto_ptrap3 = new int(2);

//出錯,不能隱式初始化

auto_ptr ap(new

int(1

));

cout

<< ap.get()列印數值1的位址 : 0x6d2d18

int *p =ap.get

();  cout

<< *p列印數值1

auto_ptr p1(new

int(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 #include 

using

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(new

int(1

));  shared_ptr

p2(new

int(2

));  p1.swap(p2);

//交換後 p1=2,p2=1

cout

<< *p1 列印 2

cout

<< *p2 列印 1

shared_ptr sp1(new

int(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 #include 

using

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...