C 智慧型指標一

2021-09-25 21:58:20 字數 2047 閱讀 1624

資源獲得及初始化,獲得資源馬上進行初始化

是一種利用物件生命週期來控制程式資源(如記憶體、檔案句 柄、網路連線、互斥量等等)的簡單技術。

在物件構造時獲取資源,接著控制對資源的訪問使之在物件的生命週期內始終保持有效,最後在物件析構的時候釋放資源。藉此,我們實際上把管理乙份資源的責任託管給了乙個物件。

//智慧型指標專門用來管理動態開闢的空間

//raii不等價於只能指標

//raii是解決問題的思想

//智慧型指標是raii思想的一種實現

template

<

class

t>

class

smartptr

~smartptr()

//在析構函式中釋放

t*get(

) t*

operator*(

) t*

operator

->()

private

: t* _ptr;};

//託管

smartptr<

int*

>sp(

newint);

//這樣在外界無法訪問,需要過載 operator*() operator->()

//這樣,就算拋異常導致結束時未釋放資源,函式結束銷毀物件時會自動呼叫析構函式

//模仿實現

template

<

class

t>

class

auto_ptr

//c++98

~auto_ptr()

//在析構函式中釋放

t*operator*(

) t*

operator

->()

//管理權轉移

auto_ptr

(const auto_ptr

& ap)

:_ptr

(ap._ptr)

// 這樣就解決了一塊空間被多個物件使用而造成程式奔潰問題

auto_ptr

&operator=(

const auto_ptr

& ap)

_ptr = ap._ptr;

// 轉移資源到當前物件中

ap._ptr =

nullptr;}

return

*this;}

//測試函式

void

test_auto_ptr()

private

: t* _ptr;};

void

test_auto_ptr()

//推薦使用

//簡單粗暴,不允許拷貝

//是執行緒安全的,訪問資料需要加鎖,不會出現同時多執行緒使用

template

<

class

t>

class

unique_ptr

~unique_ptr()

//在析構函式中釋放

t*operator*(

) t*

operator

->()

//不允許拷貝和賦值

c++98防拷貝的方式:只宣告不實現+宣告成私有

// c++11防拷貝的方式:delete

unique_ptr

(const unique_ptr

& up)

=delete

; unique_ptr

&operator=(

const unique_ptr

& up)

=delete

;//測試函式

void

test_unique_ptr()

//自己實現

private

: t* _ptr;

};

c 智慧型指標的問題 智慧型指標初探(一)

為什麼要有智慧型指標 在c 中,動態記憶體的管理一般是用一對運算子完成的 new和delete。new 在動態記憶體中為物件分配一塊空間並返回乙個指向該物件的指標。delete 指向乙個動態獨享的指標,銷毀物件,並釋放與之關聯的記憶體。使用new和delete動態記憶體管理經常會出現問題 忘記釋放記...

C 智慧型指標(一) auto ptr指標

智慧型指標分為四種 1 auto ptr c 98 2 unique ptr c 11 3 shared ptr c 11 4 weak ptr c 11 本篇我們只講auto ptr指標的實現 temlpate typename t class auto ptr auto ptr t operat...

c 智慧型指標

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