C++ shared_ptr Gleichheits-operator

Den Gleichheitsoperator für shared_ptr ist wie folgt definiert:

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

Dieser defekt zu sein scheint. Wäre es nicht besser gewesen, uns die Gleichberechtigung auf dem, was a und b
zeigen? Oder wäre das eine unfaire Einschränkung der Benutzerinnen und Benutzer der Bibliothek (in diesem
Sie haben, um eine Gleichheits-operator) ?

Wenn ich eine Karte oder eine hash_table mit shared_ptrs, dann wird die aktuelle definition
macht Gleichheit unbrauchbar. Betrachten Sie zum Beispiel

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

Nicht überprüfen wir wollen, dass die ptrs für jedes int in m1 und m2 zeigen auf den selben Wert ?

Kann ich setze meine eigenen Gleichheit durch Abflachung m1, m2 aus (Bau-sets von jedem,
die Dereferenzierung shared_ptrs auf dem Weg). Gibt es eine STL-trick, werden dies zu erreichen
oder eine andere Möglichkeit zum testen der Gleichheit in der Gegenwart shared_ptrs ordentlich ?

  • Es hängt davon ab, was meinen Sie mit Gleichheit. Für gewöhnliche Zeiger, das bedeutet "auf das gleiche Objekt". Mir scheint es sinnvoll, dieses Konzept zu erweitern Gleichheit zu shared_pointer.
InformationsquelleAutor user231536 | 2011-04-19
Schreibe einen Kommentar