先說說stl中的智慧型指標auto_ptr,先說說auto_ptr的特點。std::auto_ptr用來管理單個堆記憶體物件,但是獨享所有權,且不允許賦值和拷貝(沒有過載operator=),所以如果在函式內部需要指標時,auto_ptr是乙個不錯的選擇,但需要注意的是它不容許複製,這也就是容器(vector,list等)中的元素型別不能是auto_ptr。一般的用法是
std::auto_ptrserver = std::auto_ptr(new server_t());
再看看boost中的指標。boost中有scoped_ptr、scoped_array、shared_ptr 、shared_array和weak_ptr 這5種型別。
scoped_ptr:scoped_ptr和auto_ptr的特點完全一樣。
socped_array:雖然說socped_ptr不能賦值拷貝,但也有用處,但另一缺點是它不能管理陣列,很多情況我們都需要在函式內部動態申請記憶體,等函式返回時釋放記憶體。
socped_array的特點就在於此,它可以管理連續的位址空間,而在離開作用域時自動釋放。需要注意的是socped_array仍然不能用於容器或者函式間傳遞,因為它仍然沒有實現計數引用。
shared_ptr:較之於socped_ptr,shared_ptr的特點在於它可以賦值拷貝,內部有乙個引用計數器,只有當計數器等於0時才析構記憶體,它內部過載了=運算子,所以說shared_ptr可用做容器元素,正如名字一樣,shared_ptr——共享。
shared_array:可以這麼說,shared_array = socped_arrayr + shared_ptr,怎麼說呢。。。就是說shared_ptr既可以用來管理連續位址空間,又可以在函式見傳遞,或者是用於容器中。
week_ptr:shared_ptr的引用技術很好的解決了複製拷貝問題,但是這些都是01問題,要麼能拷貝複製,要麼不能拷貝複製,那假如我想在有些情況下需要拷貝複製,有些情況下不需要拷貝複製呢?比如說迴圈引用,再比如說基類中的指標總不能用計數器吧。所以說這就是week_ptr的用處,week_ptr可以對shared_ptr進行引用而不會引起其計數器增加。
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 指標類似於乙個帶計數器的指標,當指標計數次數為0時,它將自動析構物件。shared ptr指標可通過一次new出來,一直向下傳遞,直到每次析構shared ptr時將該指標引用量 1 注 每次進行不帶引用的傳遞時呼叫次數會加1,但析構時同時會 1,若用引用傳遞,每次呼叫值不增加,但同樣...