智慧型指標_shared_ptr: 共享智慧型指標
shared_ptr 是最像指標的智慧型指標,是boost.smart_ptr庫中最有價值、最重要的組成部分,也是最有用的,boost庫的許多元件——甚至還包括其他一些領域的智慧型指標都使用了shared_ptr.
shared_ptr與scoped_ptr一樣包裝了new操作符在堆上分配的動態物件,但它實現的是引用計數型的智慧型指標,可以被自由地拷貝和賦值,在任意的地方共享它,當沒有**使用(引用計數為 0 )它時才刪除被包裝的動態分配的物件。shared_ptr也可以安全地放在標準容器中,並彌補了auto_ptr因為語義而不能把指標作為stl容器元素的缺陷。
使用:
#include #include using namaspace std;
using namaspace boost;
int main()
auto_ptr物件拷貝構造和賦值的同時需要轉移擁有權,以避免對同一塊空間的對此釋放;
而shared_ptr則運用引用計數,在拷貝構造和賦值時,將引用計數加 1,析構時,將引用計數減 1,當引用計數為 0 時,對空間進行釋放。 //
實現:
<1>shared_count.h
#ifndef _shared_count_h
#define _shared_count_h
#include "sp_counted_base.h"
#include "sp_counted_impl_xx.h"
class shared_count
shared_count(const shared_count &r):pi_(r.pi_) }
~shared_count()
public:
long use_count()const
bool unique()const
void swap(shared_count &r)
private:
sp_counted_base *pi_; //父類指標作為介面,實現多型 };
#endif
<1-2>sp_counted_base.h
#ifndef _sp_counted_base_h
#define _sp_counted_base_h
class sp_counted_base
virtual ~sp_counted_base()
{}public:
virtual void dispose()=0;
void release() }
viod add_ref_copy()
public:
long use_count()const
private:
long use_count_; };
#endif
<1-3>sp_counted_impl_xx.h
#ifndef _sp_counted_impl_xx_h
#define _sp_counted_impl_xx_h
#include "sp_counted_base.h"
templateclass sp_counted_impl_xxt:public sp_counted_base
~sp_counted_impl_xx()
{}public:
virtual void dispose()
private:
t *px_; };
#endif
<2>shared_ptr.h
#ifndef _shared_ptr_h
#define _shared_ptr_h
#include "shared_count.h"
templateclass shared_ptr
shared_ptr& operator=(const shared_ptr&r)
return *this;
} ~shared_ptr()
t* get()const
viod swap(shared_ptr&other)
public:
long use_count()const
bool unique()const
private:
t *px;
shared_count pn;
};#endif
<3>main.cpp
#include #include "shared_ptr.h"
using namespace std;
int main()
構造順序:shared_ptr <-- shared_count <-- new sp_counted_impl_xx <-- sp_counted_count
C Boost智慧型指標詳解
一 簡介 由於 c 語言沒有自動記憶體 機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程式過早退出,沒有執行delete 的情況並不罕見。用智慧型指標便可以有效緩解這類問題,本文主要講解參見的智慧型指標...
C Boost 使用方法(智慧型指標)
參考資料 智慧型指標 std auto ptr 基本上就像是個普通的指標 通過位址來訪問乙個動態分配的物件。std auto ptr 之所以被看作是智慧型指標,是因為它會在析構的時候呼叫 delete 操作符來自動釋放所包含的物件。當然這要求在初始化的時候,傳給它乙個由 new 操作符返回的物件的位...
boost庫智慧型指標
程式的記憶體資源管理一直是個比較麻煩的問題,c 程式在引入智慧型指標之前,new出來的記憶體,需要自己手動的銷毀,自己去管理申請堆記憶體的生命週期。有的時候難免會遺漏對資源的釋放銷毀。智慧型指標則能很好的解決記憶體管理的問題,不但能很好的管理裸指標,還能管理記憶體資源 raii 機制。前借助boos...