Будут ли равные адреса type_info означать равные типы? - PullRequest
2 голосов
/ 11 августа 2011

Я микрооптимизирую код для идентификации типов объектов . Я предполагаю, что могу использовать следующее для проверки того, имеют ли два объекта, созданные в одном модуле, идентичные типы:

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 объект, стоящий за этой ссылкой, будет гарантированно работать до тех пор, пока модуль не будет выгружен . Поэтому, как только ссылка возвращается, никакой другой объект не может занимать тот же адрес.

Таким образом, если адреса совпадают, то это идентичные type_info объекты и идентичные типы данных. Если реализация возвращает разные type_info объекты для одного и того же типа, вызывается type_info::operator== и выполняется дополнительная проверка.

Это правильное предположение?

1 Ответ

3 голосов
/ 11 августа 2011

Очевидно.

Равные адреса означают, что оба указателя ссылаются на один и тот же объект в памяти.Если указатель имеет тип type_info*, то, очевидно, это означает, что объекты (т.е. first и second в вашем случае), переданные в typeid(), имеют одинаковый тип.В конце концов, как два указателя, имеющие один и тот же адрес, могут ссылаться на разные type_info объекты, чтобы стать разными типами?

...