Оператор равенства для 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 для каждого целого в m1 и m2 указывают на одно и то же значение?
Я могу реализовать свое собственное равенство, выровняв m1, m2 out (создавая множества из каждого, разыменовывая shared_ptrs по пути).Есть ли уловка STL, которая позволит выполнить этот или какой-либо другой способ аккуратно проверить равенство при наличии shared_ptrs?