在《effective c++》一書中,scott meyers用了一章的篇幅來說明c++資源管理的一些內容,本文依次為基礎。
raii:resourse acquisition is initialization(資源獲取即初始化),將資源放到管理物件中,管理物件使用析構函式來確保資源釋放。
常見的智慧型指標有這些:
auto_ptr,share_ptr,weak_ptr,unique_ptr
下面我們將依次介紹這些智慧型指標的特點和實現:
- auto_ptr
auto_ptr通過new表示式來獲取物件,被銷毀時會自動刪除它指向的物件。所以,不要讓多個auto_ptr指向同乙個物件。因此,auto_ptr具有唯一控制權。注意:在c++11 中棄用,在c++17中移除。具體見cppreference。我們舉乙個簡單的例子:
//customer是乙個類
std::auto_ptr
pcus1(new customer());
std::auto_ptr
pcus2(pcus1); //pcus2指向物件,pcus1設為null
pcus1 = pcus2;//pcus1指向物件,pcus2設為null
下面給出乙個實現的版本,《more effective c++》一書中的版本:
template
class
auto_ptr //default ctor
template
auto_ptr(auto_ptr
& rhs) : pointee(rhs.release()) //copy ctor
~auto_ptr() //dtor
template
auto_ptr
& operator=(auto_ptr
& rhs)
t& operator*() const
t* operator->() const
t* get() const
t* release()
void reset(t* p = 0)
}private:
t* pointee;
}
share_ptr是一種引用計數型智慧型指標(reference-counting smart point, rcsp),多個share_ptr可以共享乙個物件,具體見cppreference。
下面給出乙個簡單的實現版本,在github上找到的乙個實現版本。
template
class share_ptr
C 之智慧型指標
本文發表於1999年10月份的c c users journal,17 10 1.為什麼稱它為 自動 指標?auto ptr只是眾多可能的智慧型指標之一。許多商業庫提供了更複雜的智慧型指標,用途廣泛而令人驚異,從管理引用的數量到提供先進的 服務。可以把標準c auto ptr看作智慧型指標的ford...
C 之智慧型指標
c 中有四個智慧型指標 auto ptr,shared ptr,weak ptr,unique ptr,其中後三個是c 11支援,並且第乙個已經被c 11棄用。智慧型指標從書面意思來說,就是智慧型。主要是動態記憶體的使用很容易出問題,要在正確的時間正確釋放記憶體是很困難的。有時我們可能忘了釋放記憶體...
c 之智慧型指標
設計出乙個class像指標,但是功能更強大,分為兩種形式一種是標準庫的源 早期的指標,多半是過載 和 第二種是迭代器的智慧型指標 1.早期的智慧型指標 templateclass shared ptr t operator const shared ptr t p px p private t px...