2011-03-04 115 views
16

什麼時候應該使用intrusive_ptr而不是shared_ptr?Boost智能指針

+0

+1不錯的問題,但[可能重複](http://stackoverflow.com/questions/569775/smart-pointers-boost-explained)。 – 2011-03-04 16:15:06

回答

15

當您已經有一個引用計數器存儲在您指向的對象內時。

+1

+1,除了錯字,所以我爲你修復:)。 – 2011-03-04 16:12:23

11

從C++標準庫超越:介紹提振 比昂·卡爾森

在大多數情況下,你不應該使用boost :: intrusive_ptr,因爲共同擁有的功能更是一應俱全升壓: :shared_ptr,非侵入式智能指針比侵入式智能指針更靈活。但是,有時候需要插入引用計數,可能是遺留代碼或與第三方類的集成。當需要時,intrusive_ptr符合法案,與其他Boost智能指針類具有相同的語義。

通過使用另一個Boost智能指針,可以確保所有智能指針需求的一致接口,無論它們是否侵入。引用計數必須由與intrusive_ptr一起使用的類提供。 intrusive_ptr通過對兩個函數intrusive_ptr_add_ref和intrusive_ptr_release進行非限定調用來管理引用計數;這些函數必須正確處理intrusive_privile參數才能正常工作。對於與intrusive_ptr一起使用的類型中已經存在引用計數的所有情況,啓用對intrusive_ptr的支持與實現這兩個函數一樣簡單。

  • 你需要把它當作一個智能指針使用intrusive_ptr。
  • 存在使用或提供侵入式引用計數的現有代碼。
  • 智能指針的大小等於原始指針的大小是非常重要的。
3

尼克說什麼。一個真實的例子是管理COM指針。