C 資源管理之智慧型指標

2021-08-21 01:40:12 字數 1387 閱讀 7798

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