boost 提供了一下幾種智能指針:
scoped_ptr scoped_array shared_ptr shared_array weak_ptr
-
scoped_ptr scoped_array
用於確保動態分配的對象能夠被正確地刪除。scoped_ptr 有與std::auto_ptr類似的特性,而最大的區別在於它不能轉讓所有權而auto_ptr可以。事實上,scoped_ptr永遠不能被複制或被賦值!scoped_ptr 擁有它所指向的資源的所有權,並永遠不會放棄這個所有權。scoped_array與scoped_ptr顯然是意義等價的,但是是用來處理數組的。 - shared_ptr shared_array
shared_ptr是可以共享所有權的智能指針,它對所管理的對象進行了引用計數,當新增一個boost::shared_ptr對該對象進行管理時,就將該對象的引用計數加一;減少一個boost::shared_ptr對該對象進行管理時,就將該對象的引用計數減一,如果該對象的引用計數爲0的時候,說明沒有任何指針對其管理,才調用delete釋放其所佔的內存。
boost::shared_ptr並不是絕對安全,下面幾條規則能使我們更加安全的使用
-
避免對shared_ptr所管理的對象的直接內存管理操作,以免造成該對象的重釋放
-
shared_ptr並不能對循環引用的對象內存自動管理(這點是其它各種引用計數管理內存方式的通病)。
-
不要構造一個臨時的shared_ptr作爲函數的參數。