El operador de igualdad para shared_ptr se define de la siguiente manera:C++ shared_ptr operador de igualdad
template<class T, class U> inline bool operator==(
shared_ptr<T> const & a, shared_ptr<U> const & b)
{
return a.get() == b.get();
}
Esto parece roto. ¿No hubiera sido mejor enviar la igualdad a la que a y b apuntan? ¿O sería una restricción injusta para los usuarios de la biblioteca (en ese tienen que proporcionar un operador de igualdad)?
Si tengo un mapa o un hash_table que contenga shared_ptrs, entonces la definición actual hace que la igualdad no se pueda usar. Por ejemplo, consideremos
std::map<int, std::tr1::shared_ptr<T> > m1, m2;
no es cierto que desee comprobar que los PAD para cada int en M1 y M2 están señalando en el mismo valor?
Puedo implementar mi propia igualdad aplanando m1, m2 (construyendo conjuntos de cada uno, desreferenciando shared_ptrs a lo largo del camino). ¿Hay algún truco de STL que logre este o alguna otra forma de probar la igualdad en presencia de shared_ptrs ordenadamente?
Depende de lo que quiere decir con igualdad. Para punteros ordinarios, eso significa "señalar el mismo objeto". Para mí, parece razonable extender este concepto de igualdad a shared_pointer. –