Вы должны использовать operator==
:
оператор BOOL == (Const QSharedPointer & ptr1, Const QSharedPointer & ptr2)
Возвращает истину, если указатель ссылается ptr1 одно и то же указатель, на который ссылается ptr2. Если параметр шаблона ptr2 отличается от параметра ptr1, QSharedPointer будет попытаться выполнить автоматический static_cast, чтобы гарантировать, что указатели равны. Если параметр шаблона ptr2 не является базой или производным типом из ptr1, вы получите ошибку компилятора.
Таким образом, нет необходимости получать указатели через data()
метод, + он будет пытаться сделать static_cast
, чтобы соответствовать аргументы шаблона.
Кроме того, обратите внимание, что не имеет значения, перегружены ли объекты, сохраненные в указателе operator==
- вы просто сравниваете указатели здесь, а operator==
определен для типов указателей. Если вы хотите сравнить объекты, указатели, относящиеся к, вам нужно разыменования указателей и сравнивать ссылки на объекты (которые будут вызываться T::operator==
метод):
if(*ptr1 == *ptr2)
// ...
Или, я не заметил «Связанные Непро- Члены». Какой позор .. Спасибо – Littlebitter