boost 智慧型指標

2021-08-01 10:28:58 字數 1798 閱讀 3136

shared 指標類似於乙個帶計數器的指標,當指標計數次數為0時,它將自動析構物件。

shared_ptr指標可通過一次new出來,一直向下傳遞,直到每次析構shared_ptr時將該指標引用量-1

注:每次進行不帶引用的傳遞時呼叫次數會加1,但析構時同時會-1,若用引用傳遞,每次呼叫值不增加,但同樣析構時值也不減小。

我是乙個標籤

#include 

#include

#include

using

namespace

std;

using

namespace boost;

class fa

};int foo1(shared_ptr

pfa)

shared_ptr

& foo2(shared_ptr

& pfa)

int main()

由於上邊的方式仍有多處new使得程式不平衡,因此改用make_shared.注意make_shared 為指標型別,陣列型別慎用。

#include 

#include

#include

#include

#include

using

namespace

std;

using

namespace boost;

int main()

make_shared 內部統計乙個引用次數的變數,每次析構會-1,

當引用次數為0時會析構該物件,根據目前測試結果,該物件

以引用方式返回時次數不減小,即可封入函式中進行操作。

make_shared 返回為shared_ptr型別物件,該物件對自身

成員函式過載了』.』如t1.use_count()。對new出的變數過載了』->』

,即t1->length()。注意如果要使用new出變數的過載操

作符時要對shared_ptr進行取址,否則會使用智慧型指標本身的過載。

#include 

#include

#include

using

namespace

std;

using

namespace boost;

//注意該處型別

boost::shared_ptr

create_entity()

int main(int argc, char** argv)

這確實是乙個標籤

#include 

#include

#include

using namespace std;

using namespace boost;

int main()

assert(wp.use_count() == 1);

p1.reset();

if(wp.expired() == false)

std:

:cout<<"source point is lose effcacy"

<:

:endl;

//當指標被重置之後該處將返回失敗

if(wp.lock() == null)

std:

:cout<<"get the source address is nullptr"

<:

:endl;

}

boost 智慧型指標

boost shared ptr 的記憶體管理機制 boost shared ptr 的管理機制其實並不複雜,就是對所管理的物件進行了引用計數,當新增乙個 boost shared ptr 對該物件進行管理時,就將該物件的引用計數加一 減少乙個 boost shared ptr 對該物件進行管理時,...

boost 智慧型指標

最近使用boost的智慧型指標,檢視了一些帖子。總結如下 智慧型指標分類 智慧型指標使用注意事項 多執行緒安全性分析 這個帖子的結論很好,1 shared ptr是乙個非常實用的智慧型指標。2 shared ptr的實現機制是在拷貝構造時使用同乙份引用計數。3 對同乙個shared ptr的寫操作不...

Boost智慧型指標 shared ptr

boost scoped ptr雖然簡單易用,但它不能共享所有權的特性卻大大限制了其使用範圍,而boost shared ptr可以解決這一侷限。顧名思義,boost shared ptr是可以共享所有權的智慧型指標,首先讓我們通過乙個例子看看它的基本用法 該程式的輸出結果如下 the sample...