C Boost 使用方法(智慧型指標)

2021-09-25 04:32:38 字數 3458 閱讀 5096

參考資料:

智慧型指標: std::auto_ptr 。 基本上就像是個普通的指標: 通過位址來訪問乙個動態分配的物件。std::auto_ptr 之所以被看作是智慧型指標,是因為它會在析構的時候呼叫 delete 操作符來自動釋放所包含的物件。當然這要求在初始化的時候,傳給它乙個由 new 操作符返回的物件的位址。

std::auto_ptr在傳遞物件時,將物件的所有權傳遞給其他std::auto_ptr指標,也可使用release將指標所有權釋放,給與物件指標。

若無智慧型指標,則每乙個動態分配記憶體的函式都需要捕捉所有可能的異常,以確保在異常傳遞給函式的呼叫者之前將記憶體釋放掉。詳情請檢視boost c++ 庫 smart pointers。

方法:

get() :返回所含物件的位址;

reset() :用乙個新的物件來重新初始化智慧型指標;

release():釋放對其指標的所有權,並不呼叫delete;

資源申請即初始化,關鍵在於使用析構函式進行銷毀物件,從而保證動態分配的記憶體得到釋放

乙個作用域指標獨佔乙個動態分配的物件;不可直接使用『=』更改指標指向的物件即不能將包含的物件轉移給其他作用域指標,一旦使用reset轉移,則使用delete釋放原來的物件。

類名:

boost::scoped_ptr

位置:

boost/scoped_ptr.hpp

boost::scoped_ptr 的析構函式中使用 delete 操作符來釋放所包含的物件。(注意與boost:scoped_array 類進行區分)

例子:

int

main()

使用方式與作用域指標相似,作用域陣列的析構函式使用 delete 操作符來釋放所包含的物件。

類名:

boost::scoped_array

位置:

boost/scoped_array.hpp

例子:

int

main()

與作用域指標相似,但不一定獨佔乙個物件。可以和其他指標共享物件有所有權,當指向物件的最後乙個指標銷毀之後,物件被釋放。boost::shared_ptr 在內部記錄著引用到某個物件的共享指標的數量。

類名:

boost::shared_ptr

位置:

boost/shared_ptr.hpp

boost::shared_ptr 的建構函式的第二個引數是乙個普通函式或者函式物件,這個方法會在共享指標超出它的作用域時自動呼叫,可用於銷毀所含的物件。

例子1:

int

main()

例子2:

int

main()

共享陣列的行為類似於共享指標,共享陣列在析構時,預設使用 delete 操作符來釋放所含的物件。

類名:

boost::shared_array

位置:

boost/shared_array.hpp

例子:

int

main()

弱指標只有在配合共享指標一起使用時才有意義。弱指標必定通過boost::shared_ptr 來初始化。

類名:

boost::weak_ptr

位置:

boost/weak_ptr.hpp

方法:

lock() :返回boost::shared_ptr所指物件,若無則為空;

例子:

#include 

#include

#include

#include

//static_cast為強制轉換

dword winapi reset

(lpvoid p)

dword winapi print

(lpvoid p)

intmain()

大體上與共享指標一致,但是需要記錄自身被引用的次數。

類名:

boost::intrusive_ptr

位置:

boost/intrusive_ptr.hpp

方法:

addref() :內部的引用計數增 1;

release() :內部的引用計數減 1,引用為0是自動銷毀;

例子:

#include  

#include

#include

void

intrusive_ptr_add_ref

(idispatch *p)

void

intrusive_ptr_release

(idispatch *p)

void

check_windows_folder()

void

main()

普通的方法將指標物件存入容器時,需要頻繁增減內部引用次數。指標容器提供了專門管理動態分配的物件。boost::ptr_vector 獨佔它所包含的物件,容器之外的共享指標不能共享所有權。

類名:

boost::ptr_vector

位置:

boost/ptr_container/ptr_vector.hpp

例子:

int

main()

C Boost智慧型指標詳解

一 簡介 由於 c 語言沒有自動記憶體 機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程式過早退出,沒有執行delete 的情況並不罕見。用智慧型指標便可以有效緩解這類問題,本文主要講解參見的智慧型指標...

C Boost庫智慧型指標 shared ptr

智慧型指標 shared ptr 共享智慧型指標 shared ptr 是最像指標的智慧型指標,是boost.smart ptr庫中最有價值 最重要的組成部分,也是最有用的,boost庫的許多元件 甚至還包括其他一些領域的智慧型指標都使用了shared ptr.shared ptr與scoped p...

智慧型指標(二)智慧型指標的方法和構造

預設構造shared ptrsp和unique ptrup 指標構造shared ptrsp t 和unique ptrup t 這裡預設為explicit 帶刪除器的構造shared ptrp q,d q這裡可以內建指標和智慧型指標,同時將用d析構器代替delete。所以定義了這麼乙個帶刪除器的建...