Tengo una lista de weak_ptrs que estoy usando para hacer un seguimiento de los objetos. En un cierto punto, me gustaría eliminar un elemento de la lista dado un shared_ptr o un weak_ptr.eliminando el elemento de la lista de weak_ptrs
#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);
}
Sin embargo, cuando me descomentar las líneas anteriores, el programa no va a construir:
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)
¿Cómo se quita un elemento de la lista dada una shared_ptr o una weak_ptr?
Hay un 'owner_before', sin embargo, que implementa un order.So parcial también se puede escribir la lambda como' [WP] (std :: weak_ptr p) {return! (P.owner_before (WP) || wp.owner_antes (p)); '- no se necesita bloqueo. Además, en tu código creo que te perdiste el caso 'swp == sp == 0'. –
MSalters
¿Hay alguna manera de hacer esto sin una lambda? Estaré quitando artículos en muchos lugares diferentes. Veo que se llama al predicado remove_if en cada elemento individualmente, pero tendré que comparar 2 punteros como los que tiene arriba. – user987280
@ user987280 Seguro que puedes usar un functor o una función gratuita en lugar de un lambda. Pero, ¿cuál es exactamente el problema que recibe el predicado para cada elemento? – mkaes