2013-05-08 53 views
0

我有一個全球地圖來存儲智能指標。 其他類通過鍵獲取這些指針。尋找一個智能地圖

它們具有使用鍵作爲成員變量:int USING_POINTER_KEY。

因此,我可以在「getGlobalPointer」中定義:通過鍵'USING_POINTER_KEY'從地圖獲取指針。

它的工作原理!我有足夠的理由以這種方式存儲我的指針。沒關係。

我的問題是:我如何教我的全球地圖,以自動刪除不再由類使用的條目?

我想引用計數。但我不知道如何...

+0

'std :: shared_ptr'? – iammilind 2013-05-08 05:36:33

+0

假設你的地圖是一個充滿視頻的網站,就像你知道的那個管網站一樣。人們通過鑰匙來檢索視頻,觀看它們,然後繼續他們的生活。您想刪除不再使用的視頻。這究竟意味着什麼?目前沒有人觀看的視頻?我不認爲你的客戶會很高興。沒有人會觀看的視頻?你怎麼知道人們會做什麼? – 2013-05-08 05:47:18

回答

0

這種通吃方案是一個紅旗。

但是,您可以使用智能指針(std::shared_ptr)創建自定義刪除程序。只需將函數指針作爲構造函數shared_ptr的第二個參數傳遞即可。該函數可以從全局表中刪除指針。

智能指針已經是引用計數的實現,所以你只需要添加一個回調。

+1

如果映射中保存了'shared_ptr',那麼引用計數不會是0.所以你應該在那裏放一個'std :: weak_ptr'。 – 2013-05-08 05:46:48

+0

@ThomasFenzl是的,我應該提到這一點。該類應該從'std :: enable_shared_from_this'派生。代表實際客戶端的第一個'shared_ptr'獲得傳遞給其構造函數的刪除器。 – Potatoswatter 2013-05-08 15:01:48