2016-10-19 29 views
3

我對boost的侵入指針有點困惑。定義說:提升侵入指針

「每一個新的intrusive_ptr例如遞增 使用不合格的調用函數intrusive_ptr_add_ref, 傳遞給它的指針作爲參數引用計數類似地,當 intrusive_ptr被破壞,它調用。 intrusive_ptr_release;這 函數負責破壞時,其參考 計數下降到零的對象的用戶,預計將提供這兩個函數合適 定義「

這是否意味着我必須實施這些方法,或者我可以這麼做?關鍵是,我們正在使用它,因爲函數需要一個入侵指針。我們在其他地方使用了共享指針,所以只是擔心指針是否被管理,並且在沒有更多引用時會被刪除。

回答

4

必須提供這些功能。這就是boost::intrusive_ptr的運作方式。

我們將其與boost::shared_ptr進行比較。 shared_ptr管理與指針對象相關的控制塊中的引用計數本身。創建一個shared_ptr遞增refcount。銷燬一個shared_ptr遞減該refcount。當refcount變爲0時,指針被破壞。

intrusive_ptr以完全相同的方式工作,但不管理引用計數本身。它只是向它的客戶發出信號「現在必須增加引用次數」和「現在引用次數必須減少」。它通過調用提到的兩個函數來做到這一點,即intrusive_ptr_add_refintrusive_ptr_release。如果你沒有定義它們,你會得到一個編譯錯誤。

將這些函數看作引用計數器的接口。使用intrusive_ptr指示refcount在指針外(通常在指針對象本身)的某個位置進行管理,並且指針侵入該refcount的,將其用於其目的。

+0

非常感謝您的詳細解釋。雖然我們沒有收到編譯錯誤,但是當我們創建一個intrusive_ptr到boost狀態圖事件時。 這是否意味着這些方法的實現位於boost狀態圖事件中? –

+0

@BenjaminLarsen可能是,我對Boost狀態圖一無所知。 – Angew

+0

我們找到了實現,它在Event中實現。再次感謝! –