Я микрооптимизирую код для идентификации типов объектов . Я предполагаю, что могу использовать следующее для проверки того, имеют ли два объекта, созданные в одном модуле, идентичные типы:
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==
и выполняется дополнительная проверка.
Это правильное предположение?