Boost shared_ptr, похоже, не поддерживает оператор == - PullRequest
2 голосов
/ 29 декабря 2011

Вот то, что работает в последней версии QT IDE под Windows 7 (boost.1.48)

class Employee {
public:
    int Id;
...
bool operator==(const Employee& other) {
       qDebug() << this->Id << ":" << "compare with " << other.Id;
       return this->Id==other.Id;
   }
}

код тестирования:

Employee jack1;
jack1 == jack1;   // the operator== gets invoked.

shared_ptr<Employee>  jack(new Employee);
jack == jack;  //  the operator== doesn't get invoked.

Соответствующий код в файле заголовка повышенияis:

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

Кажется, что он выполняет сравнение указателей вместо того, что я ожидаю.

Что я делаю неправильно?

Ответы [ 2 ]

16 голосов
/ 29 декабря 2011

shared_ptr является классом, похожим на указатель (он моделирует указатель с дополнительными функциями), поэтому operator== для shared_ptr сравнивает указатели.

Если вы хотите сравнить указанные объекты, вы должны использовать *jack == *jack, как обычные указатели.

5 голосов
/ 29 декабря 2011

попробуйте это:

(*jack) == (*jack);

Не забудьте почтить ваши указатели.

...