2013-02-14 4 views
1

이 QSharedPointer이, 내가 확인할 수 있습니다 내가 작성해야 그들이이확인 내가 두 QSharedPointer이 동일한 데이터

QSharedPointer1 == QSharedPointer2 

또는 같은 운영자 ==를 사용하여 동일한 개체에 대한 지적이다

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

포인터에 저장된 객체는 연산자 ==를 오버로드했습니다.

답변

0

: PTR1에 의해 참조 포인터가 PTR2에 의해 참조와 같은 포인터 인 경우

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

true를 반환합니다.

+0

을 또는 : 당신이 포인터를 참조하는 개체를 비교하려는 경우, 당신은 역 참조 포인터에와 (T::operator== 메소드를 호출) 객체에 대한 참조를 비교해야 회원들 ". 얼마나 부끄러운 .. 감사합니다. – Littlebitter

0

첫 번째 버전은 OK here

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

반환 PTR1에 의해 참조 포인터가 PTR2에 의해 참조와 같은 포인터의 경우는 true 관련되어야한다. QSharedPointer class reference에서

2

당신은 operator== 사용해야

부울 연산자 == (CONST QSharedPointer이 & PTR1, const를 QSharedPointer & PTR2가)

반환 PTR1에 의해 참조 포인터가 동일한에 해당하는 경우 ptr2가 참조하는 포인터. ptr2의 템플릿 매개 변수가 ptr1과 다른 경우 QSharedPointer는 포인터가 비교되도록 자동 static_cast를 수행하려고 시도합니다. ptr2의 템플릿 매개 변수가 이 아니거나 ptr1의 파생 형식이 아니면 컴파일러 오류가 발생합니다.

그래서,이 data() 방법을 통해 포인터를 가져올 필요가 없으며, + 그것은 템플릿 인수와 일치하는 static_cast을 시도합니다.

또한 포인터에 저장된 객체에 operator==이 오버로드 되어도 상관이 없습니다. 여기서 포인터를 비교하는 것 뿐이며 포인터 유형에 operator==이 정의되어 있습니다. 내가 "관련 비 통지를하지 않았다

if(*ptr1 == *ptr2) 
    // ...