Оператор равенства shared_ptr C ++

Оператор равенства для shared_ptr определяется следующим образом:

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

Кажется, это не работает. Не лучше ли было бы направить равенство на то, что a и b указывают на? Или это было бы несправедливым ограничением для пользователей библиотеки (в том они должны предоставить оператор равенства)?

Если у меня есть карта или хэш-таблица, содержащая shared_ptrs, то текущее определение делает равенство непригодным для использования. Например, рассмотрим

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

. Не хотим ли мы проверить, что ptrs для каждого int в m1 и m2 указывают на одно и то же значение?

Я могу реализовать собственное равенство, сгладив m1, m2 out (построив множества из каждого, разыменование shared_ptrs по пути). Есть ли трюк с STL, который сделает это? или какой-либо другой способ аккуратно проверить равенство при наличии shared_ptrs?

11
задан Mankarse 29 October 2011 в 00:31
поделиться