2011-08-11 3 views
2

저는 마이크로 최적화 인 code for identifying object types입니다.동일한 type_info 주소는 동일한 유형을 의미합니까?

SomeCommonBase& first = ...; 
SomeCommonBase& second = ...; 
const type_info& firstInfo = typeid(first); 
const type_info& secondInfo = typeid(second); 

if(&firstInfo == &secondInfo || firstInfo == secondInfo) { 
    //identical types 
} else { 
    //different types 
} 

논리는 type_info 참조가 반환되면 해당 참조 뒤에 개체가 live until the module is unloaded 보장된다는 점이다 : 나는 같은 모듈에서 인스턴스화 두 개체가 동일한 유형이 있는지 제가 확인하기 위해 다음을 사용할 수 있습니다 가정합니다. 따라서 참조가 반환되면 다른 객체가 동일한 주소를 차지할 수 없습니다.

따라서 주소가 일치하면 type_info 개의 개체와 동일한 데이터 형식이됩니다. 구현에 의해 같은 종류의 다른 객체 인 type_info이 반환되면 type_info::operator==이 호출되고 추가 검사가 수행됩니다.

올바른 가정입니까?

+0

저는 Visual Studio가 이미이 작업을 수행하고 있다고 생각합니다. 조기에 조심하지 말고 ... –

+0

@Bo Persson : 나는 신중하게 측정하고 당신이 옳은 것처럼 보입니다. 차이는 매우 작습니다. 단지 함수 호출 만 저장하는 것 같습니다. 어쨌든 코드의 작은 조각을 사방에 약간의 속도 향상을 가지도록 변경해도 상관 없습니다. – sharptooth

답변

3

분명히.

동일한 주소는 두 포인터가 메모리의 동일한 개체를 참조 함을 의미합니다. 포인터의 유형이 type_info* 인 경우 분명히 typeid()에 전달 된 객체 (예 : firstsecond)가 동일한 유형임을 의미합니다. 결국, 동일한 주소를 가진 두 포인터가 다른 type_info 개체를 참조 할 수 있으므로 다른 형식이 될 수 있습니까?