我正在对用于识别对象类型的代码进行微优化。我假设我可以使用以下内容来检查在同一模块中实例化的两个对象是否具有相同的类型:
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==
则调用并执行附加检查。
这是一个正确的假设吗?