removing item from list of weak_ptrs

c++, pointers

Solution

There is no operator== for weak pointers. You could compare the shared_ptrs your weak_ptrs point to. E.g like this.

myList.remove_if([wp](std::weak_ptr<int> p){
    std::shared_ptr<int> swp = wp.lock();
    std::shared_ptr<int> sp = p.lock();
    if(swp && sp)
        return swp == sp;
    return false;
});

Problem

I have a list of weak_ptrs that I'm using to keep track of objects. At a certain point, I would like to remove an item from the list given a shared_ptr or a weak_ptr. ``` #include <list> int main() { typedef std::list< std::weak_ptr<int> > intList; std::shared_ptr<int> sp(new int(5)); std::weak_ptr<int> wp(sp); intList myList; myList.push_back(sp); //myList.remove(sp); //myList.remove(wp); } ``` However, when I uncomment the above lines, the program won't build: ``` 1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\list(1194): error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::tr1::weak_ptr<_Ty>' (or there is no acceptable conversion) ``` How do I remove an item from the list given a shared_ptr or a weak_ptr?

Original source