我有一组
非常基本的例子:
shared_ptr
容器,我将这些对象传递给Windows API,并在稍后通过原始指针获得回调。我想在事后定位正确的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
的方法。也就是说,我希望容器可以接受 RawPtr 和 shared_ptr 来定位 shared_ptr
项。问题在于我无法将 CFoo*
隐式转换为 shared_ptr(出于我理解的原因)。
我想过可能可以这样做:
m_gSet.erase(shared_ptr<CFoo>(pRawPtr, _do_not_delete_deleter))
但我还没有尝试过,而且它看起来很危险/丑陋。还有其他方法吗?或者我基本上是在寻找 intrusive_ptr
吗?谢谢