shared_ptr의의에 대한 항등 연산자가 정의 :다음과 같이 C++ shared_ptr의 평등 연산자는
template<class T, class U> inline bool operator==(
shared_ptr<T> const & a, shared_ptr<U> const & b)
{
return a.get() == b.get();
}
이 깨진 것 같다. 평등을 a 및 b 이 가리키는 대상으로 전달하는 것이 더 좋지 않았습니까? 아니면 도서관 사용자에 대한 부당한 제한이 될 것입니까? ( 평등 연산자를 제공해야합니다)?
shared_ptrs가 포함 된 맵 또는 hash_table이있는 경우 현재 정의 은 동등성을 사용할 수 없게 만듭니다. 예를 들어, 다음과 같습니다.
std::map<int, std::tr1::shared_ptr<T> > m1, m2;
m1과 m2의 각 int에 대한 ptrs가 동일한 값을 가리키고 있는지 확인하지 않겠습니까?
m1, m2 out을 평평하게 처리하여 각자의 평등을 구현할 수 있습니다 (길을 따라 역 참조). 이 또는 shared_ptrs가있는 상태에서 평등을 테스트하는 다른 방법을 수행 할 STL 트릭이 있습니까?
평등의 의미에 따라 다릅니다. "동일한 객체를 가리키는"것을 의미하는 일반 포인터의 경우. 나에게이 평등 개념을 shared_pointer로 확장하는 것이 합당한 것처럼 보인다. –