C Boost庫智慧型指標 shared ptr

2021-07-16 15:16:41 字數 2701 閱讀 6394

智慧型指標_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...