智慧型指標 二 shared ptr實現原理

2021-07-10 09:19:48 字數 883 閱讀 1775

前面講到auto_ptr有個很大的缺陷就是所有權的轉移,就是乙個物件的記憶體塊只能被乙個智慧型指標物件所擁有.但我們有些時候希望共用那個記憶體塊.於是c++ 11標準中有了shared_ptr這樣的智慧型指標,顧名思義,有個shared表明共享嘛.所以shared_ptr型別的智慧型指標可以做為stl容器的元素

下面我們來瞧瞧shared_ptr具體是咋實現的.相較auto_ptr有下面幾個不同的地方:

1.引進了乙個計數器shared_count,用來表示當前有多少個智慧型指標物件共享指標指向的記憶體塊

2.析構函式中不是直接釋放指標對應的記憶體塊,如果shared_count大於1則不釋放記憶體只是將引用計數減1,只是計數等於1時釋放記憶體

3.複製構造與賦值操作符只是提供一般意義上的複製功能,並且將引用計數加1.

#include

using namespace std;

template

class shared_ptr

~shared_ptr()

void deconstruct()

shared_count--;

}t& operator*() 

t* operator->() 

//複製建構函式

shared_ptr(shared_ptr& sp):m_ptr(sp.m_ptr),shared_count(sp.shared_count)

//過載運算子=

shared_ptr& operator = (shared_ptr& sp) 

};使用舉例:

假如有類struct arwen;

};//下面**全部執行正確

void main()

from: 

shared ptr智慧型指標

智慧型指標是乙個行為類似指標的物件。我們在使用堆記憶體時,都需要及時地進行釋放,避免造成記憶體洩漏。但我們偶爾也會忘記將其釋放掉,從而造成記憶體洩漏。並且,在釋放的時候,我們可能對某乙個指標進行了重複釋放,導致程式崩潰的問題。為了能夠解決這些問題,從而有了智慧型指標的設計。智慧型指標一共有四種,分別...

shared ptr(智慧型指標)

只要將 new 運算子返回的指標 p 交給乙個 shared ptr 物件 託管 就不必擔心在 寫delete p語句 實際上根本不需要編寫這條語句,託管 p 的 shared ptr 物件在消亡時會自動執行delete p。而且,該 shared ptr 物件能像指標 p 樣使用,即假設託管 p ...

智慧型指標shared ptr

shared ptr在脫離自己的作用域時候,會自動呼叫析構函式。作用域包含 塊 被呼叫函式 main函式等。include include include include using namespace std class a a int n private int n string str voi...