參考資料:
智慧型指標: 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。所以定義了這麼乙個帶刪除器的建...