2011-12-28 45 views
2

這裏是上在Windows 7最新的QT IDE(boost.1.48)升壓shared_ptr的似乎不支持運營商==

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. 

的相關在升壓頭文件中的代碼是:

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

它似乎是在做指針比較,而不是做什麼,我希望它。

我該怎麼做?

+0

另外。考慮使'operator =='爲'const'成員函數;更好的是考慮使'operator =='成爲一個帶有兩個'const'引用的自由函數。 – 2011-12-28 22:06:50

回答

16

shared_ptr是一個類似指針類(其型號,額外的功能指針),所以operator==shared_ptr比較指針。

如果您想比較指向對象,應該使用*jack == *jack,就像普通指針一樣。

+0

它是有道理的。謝謝! – 2011-12-29 00:48:52

5

試試這個:

(*jack) == (*jack);

記住要尊重你的指針。