shared ptr(智慧型指標)

2021-10-03 10:22:29 字數 817 閱讀 5573

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

shared_ptrptr(new t);  // t 可以是 int、char、類等各種型別
此後,ptr 就可以像 t* 型別的指標一樣使用,即 *ptr 就是用 new 動態分配的那個物件。

多個 shared_ptr 物件可以共同託管乙個指標 p,當所有曾經託管 p 的 shared_ptr 物件都解除了對其的託管時,就會執行delete p

#include #include using namespace std;

class a

; ~a()

};int main()

程式的輸出結果如下:

2,2,223

2 destructed

end5 destructed

4 destructed

3 destructed

只有指向動態分配的物件的指標才能交給 shared_ptr 物件託管。將指向普通區域性變數、全域性變數的指標交給 shared_ptr 託管,編譯時不會有問題,但程式執行時會出錯,因為不能析構乙個並沒有指向動態分配的記憶體空間的指標。

shared ptr智慧型指標

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

智慧型指標shared ptr

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

Boost智慧型指標 shared ptr

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