c++中關於智慧指標std::tr1::shared_ptr的用法

Mr_John_Liang發表於2013-05-08
智慧指標本身絕對不能是動態分配的記憶體,不然智慧指標就沒有存在的意義了。
智慧指標有個資料成員,是個指標,至於什麼型別,看你類别範本怎麼實現。這個指標才是動態分配記憶體的。
只能本身必須是棧裡分配記憶體。利用棧的自動回收資料的特性,在被系統西東回收時,呼叫智慧指標類的解構函式,從而釋放智慧指標內部那個指標型資料成員所指向的記憶體。

舉個例子
std::shared_ptr<int> p = std::shared_ptr<int>(new int);
這樣你就宣告瞭一個智慧指標p,並且為其內部的真實指標分配了記憶體空間。
使用時p可以像一般指標那樣用
比如
*p = 5;
即給其賦值5。
還有就是雖然你一開始new了,但是你不需要delete,只能指標會在其被系統銷燬時,檢查是否需要delete。
你這個智慧指標是share的,意味著支援共享真實指標的所有權。
所以你還可以
std::shared_ptr<int> q = p;

這樣p和q同時指向同一個記憶體。
如果p失效了,p的解構函式不會delete真實指標,因為q還沒失效。只有當q也失效,p才會在自己失效時自動delete掉內部的真實指標。這就是智慧指標智慧的地方

相關文章