我想知道是否有任何方法让我根据来自一个键入shared_ptr的unordered_set的原始指针来检索一个元素.
unordered_set< shared_ptr<MyObj> > sets;
auto myobj = make_shared<MyObj>();
sets.insert(myobj);
// Find the element myobj
sets.find(myobj);
// How to find the element based on the underlying raw pointer?
sets.find(my.obj.get()); <---- apparently this gives compile error
// This method works but it will double free myobj though (not correct)
sets.find(shared_ptr<MyObj>(my.obj.get()));
最佳答案 您可以将MyObj声明为:
class MyObj : public std::enable_shared_from_this<MyObj>
{
....
}
这会添加一个返回给定对象实例的共享指针的方法.
MyObj * rawptr = myobj.get();
sets.find(rawptr->shared_from_this());
请注意,在对象上调用shared_from_this()之前,必须有一个拥有它的std :: shared_ptr.