У меня есть два QSharedPointer, я могу проверить, они указывают на один и тот же объект, используя оператор == как это
QSharedPointer1 == QSharedPointer2
или я должен написать
QSharedPointer1.data() == QSharedPointer2.data()
Объект, который хранится в указателях, имеет перегруженный оператор ==.
От Ссылка на класс QSharedPointer:
bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)
Возвращает true, если указатель, на который ссылается ptr1, совпадает с указателем, на который ссылается ptr2.
Вы должны использовать operator==
:
оператор bool == (const QSharedPointer & ptr1, const QSharedPointer & ptr2)
Возвращает true, если указатель ссылается на
ptr1 — это тот же указатель, на который ссылается ptr2. Если ptr2
Параметр шаблона отличается от ptr1, QSharedPointer будет
попытаться выполнить автоматический static_cast, чтобы убедиться, что
сравниваемые указатели равны. Если параметр шаблона ptr2 не является
базовый или производный тип от ptr1, вы получите ошибку компилятора.
Таким образом, нет необходимости получать указатели через data()
метод, + он будет пытаться сделать static_cast
чтобы соответствовать аргументам шаблона.
Также обратите внимание, что не имеет значения, перегружены ли объекты, хранящиеся в указателе. operator==
— вы просто сравниваете указатели здесь, и operator==
определяется для типов указателей. Если вы хотите сравнить объекты, на которые ссылаются указатели, вам нужно разыменовать указатели и сравнить ссылки на объекты (которые вызовут T::operator==
метод):
if(*ptr1 == *ptr2)
// ...
первая версия должна быть в порядке, связанной с Вот
bool operator== ( const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2 )
Возвращает true, если указатель ссылается на
ptr1 — это тот же указатель, на который ссылается ptr2.