boost智能指針

boost 提供了一下幾種智能指針:

scoped_ptr  scoped_array  shared_ptr  shared_array  weak_ptr

  1. scoped_ptr  scoped_array

    用於確保動態分配的對象能夠被正確地刪除。scoped_ptr 有與std::auto_ptr類似的特性,而最大的區別在於它不能轉讓所有權而auto_ptr可以。事實上,scoped_ptr永遠不能被複制或被賦值!scoped_ptr 擁有它所指向的資源的所有權,並永遠不會放棄這個所有權。scoped_array與scoped_ptr顯然是意義等價的,但是是用來處理數組的。
  2. shared_ptr  shared_array

shared_ptr是可以共享所有權的智能指針,它對所管理的對象進行了引用計數,當新增一個boost::shared_ptr對該對象進行管理時,就將該對象的引用計數加一;減少一個boost::shared_ptr對該對象進行管理時,就將該對象的引用計數減一,如果該對象的引用計數爲0的時候,說明沒有任何指針對其管理,才調用delete釋放其所佔的內存。

boost::shared_ptr並不是絕對安全,下面幾條規則能使我們更加安全的使用

  • 避免對shared_ptr所管理的對象的直接內存管理操作,以免造成該對象的重釋放

  • shared_ptr並不能對循環引用的對象內存自動管理(這點是其它各種引用計數管理內存方式的通病)。

  • 不要構造一個臨時的shared_ptr作爲函數的參數。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章