4
我有一個容器shared_ptr
s和我把這些對象關閉到一個Windows API和我以後與原始ptr回調。事實之後,我想找到正確的shared_ptr
。這可以通過shared_ptr乾淨地完成嗎? (不使用shared_from_this()
)。std :: shared_ptr與std容器
非常簡單的例子:
class CFoo
{
};
typedef std::shared_ptr<CFoo> CFooPtr;
typedef std::set<CFooPtr> CFooSet;
extern CFooSet m_gSet;
void SomeWindowsCallBack(CFoo* pRawPtr)
{
m_gSet.erase(pRawPtr);
}
我知道,這可與intrusive_ptr
很容易做到,但我很好奇,如果有一個與shared_ptr
的方式。又名我正在尋找容器來接受RawPtr和shared_ptr以查找shared_ptr
項目。問題是,我不能隱含地將CFoo*
轉換爲shared_ptr(出於我明白的理由)。
我想我可以做
m_gSet.erase(shared_ptr<CFoo>(pRawPtr, _do_not_delete_deleter))
,但我還沒有試過,但它似乎危險/醜。有沒有另外的方法或我基本上尋找intrusive_ptr
?謝謝
是的我可以做到這一點,但像set和map這樣的容器允許O(LogN)查找,該方法會讓我回到O(N)。我希望不會失去O(LogN)查找。 – BabelFish 2011-03-08 17:50:48
那麼你會選擇使用intrusive_ptr還是選擇使用intrusive_ptr作爲參數? (轉換爲shared_ptr將在後臺執行一些分配) –
BabelFish
2011-03-08 18:02:23
@BabelFish:幸運的是,刪除器不是共享指針的模板參數!所以不需要強制轉換 – 2011-03-08 18:27:03