C++ shared_ptr opérateur d'égalité

L'opérateur d'égalité pour les shared_ptr est défini comme suit:

template<class T, class U> inline bool operator==(
    shared_ptr<T> const & a, shared_ptr<U> const & b)
{
    return a.get() == b.get();
}

Cela semble cassé. N'aurait-il pas été mieux de l'avant l'égalité, à ce que a et b
sont pointant vers? Ou serait-ce une injuste de restriction sur les usagers de la bibliothèque (dans ce
ils doivent fournir un opérateur d'égalité) ?

Si j'ai une carte ou un hash_table contenant shared_ptrs, puis la définition actuelle
fait de l'égalité inutilisable. Par exemple, considérons

std::map<int, std::tr1::shared_ptr<T> > m1, m2;

Ne nous voulons vérifier que le ptrs pour chaque type int en m1 et m2 sont pointant vers la même valeur ?

Je peux mettre en place mes propres égalité par l'aplatissement de m1, m2 (construction d'ensembles à partir de chaque,
un déréférencement shared_ptrs le long du chemin). Est-il un STL truc qui va effectuer cette
ou une autre façon de tester l'égalité dans la présence de shared_ptrs proprement ?

Cela dépend de ce que tu veux dire par l'égalité. Pour le commun des pointeurs qui signifie "pointant vers le même objet". Pour moi, il semble raisonnable d'étendre ce concept de l'égalité de shared_pointer.

OriginalL'auteur user231536 | 2011-04-19