只要將 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...