У меня есть контейнер shared_ptr
s, и я передаю эти объекты в 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
.Ака Я ищу контейнер, чтобы принять RawPtr и shared_ptr для поиска элемента shared_ptr
.Проблема в том, что я не могу неявным образом привести CFoo*
в shared_ptr (по причинам, которые я понимаю).
Я думал, что смогу сделать
m_gSet.erase(shared_ptr<CFoo>(pRawPtr, _do_not_delete_deleter))
но я еще не пробовал, и это кажется опасным / уродливым.Есть другой способ или я в основном ищу intrusive_ptr
?Спасибо