資源獲得及初始化,獲得資源馬上進行初始化
是一種利用物件生命週期來控制程式資源(如記憶體、檔案句 柄、網路連線、互斥量等等)的簡單技術。
在物件構造時獲取資源,接著控制對資源的訪問使之在物件的生命週期內始終保持有效,最後在物件析構的時候釋放資源。藉此,我們實際上把管理乙份資源的責任託管給了乙個物件。
//智慧型指標專門用來管理動態開闢的空間
//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...