2010-09-01 48 views
2

我有一個boost::shared_ptr並附帶了自定義刪除程序。將此轉換爲weak_ptr是否丟失了刪除信息?如果是的話,我應該如何重新附加同一個刪除方shared_ptr -s從weak_ptr::lock()方法中獲得?boost :: weak_ptr與自定義刪除程序的交互

我正在實現的功能是指向某些類型的活動實例的容器weak_ptr -s。我需要自定義刪除器來刪除被刪除對象的容器條目。

回答

2

不,定製刪除器永遠不會丟失。

當你lock()weak_ptr你重獲shared_ptr用相同的定製刪除(和其他屬性)的一個使用從在第一時間創建weak_ptr

但是,如果沒有shared_ptr再次引用weak_ptr,則lock()將失敗並返回空值shared_ptr

也就是說,你不應該關心定製刪除器。如果您在創建shared_ptr時指定了它,則會在最後一個相關的shared_ptr將被釋放時調用它。