【发布时间】:2011-03-08 17:44:23
【问题描述】:
我有一个shared_ptrs 的容器,我将这些对象交给 Windows API,稍后我会收到一个带有原始 ptr 的回调。我想在事后找到正确的shared_ptr。这可以用 shared_ptr 干净地完成吗? (不使用shared_from_this())。
非常基本的例子:
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 是否有办法。 Aka 我正在寻找容器来接受 RawPtr 和 shared_ptr 来定位 shared_ptr 项目。问题是我不能将CFoo* 隐式转换为shared_ptr(出于我理解的原因)。
我想我可以做到
m_gSet.erase(shared_ptr<CFoo>(pRawPtr, _do_not_delete_deleter))
但我还没有尝试过,它看起来很危险/丑陋。还有其他方法还是我基本上在寻找intrusive_ptr?谢谢
【问题讨论】:
标签: c++ stl map set shared-ptr