2013-02-14 4 views
1

У меня есть два QSharedPointer, я могу проверить, они указывают на тот же объект с использованием оператора == как этотПроверить два QSharedPointer имеют одинаковые данные

QSharedPointer1 == QSharedPointer2 

или я должен написать

QSharedPointer1.data() == QSharedPointer2.data() 

Объект, который хранится в указателях, перегрузил operator ==.

ответ

0

От QSharedPointer class reference:

bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)

Возвращает истину, если указатель ссылается ptr1 тот же указатель, что и ссылается ptr2.

+0

Или, я не заметил «Связанные Непро- Члены». Какой позор .. Спасибо – Littlebitter

0

первая версия должна быть OK, связанные с here

bool operator== (const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2)

Возвращает True, если указатель ссылается ptr1 тот же указатель, что и ссылается ptr2.

2

Вы должны использовать 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) 
    // ... 
Смежные вопросы