我有一组多态C ++类,它们都是由同一个模块(Windows DLL)实例化的。现在有两个指向这些类的指针,并调用了typeid
:
SomeCommonBase* first = ...; //valid pointer
SomeCommonBase* second = ...; //valid pointer
const type_info& firstInfo = typeid( first );
const type_info& secondInfo = typeid( second );
我可以比较检索到的type_info
地址
if( &firstInfo == &secondInfo ) {
//objects are of the same class
} else {
//objects are of different classes
}
或使用==
if( firstInfo == secondInfo ) {
//objects are of the same class
} else {
//objects are of different classes
}
检测对象是(完全)相同的类还是不同的类?当在同一个模块中实例化对象时,它是否可以保证工作?
答案 0 :(得分:2)
您只能检索const
type_info引用,并且应始终使用operator==
。
答案 1 :(得分:2)
正如我写的那样,你的代码是
SomeCommonBase* first = ...; //valid pointer
SomeCommonBase* second = ...; //valid pointer
type_info& firstInfo = typeid( first );
type_info& secondInfo = typeid( second );
它不应该编译,因为typeid
会返回对const
的引用。
更糟糕的是,您要求提供有关指针的类型信息。两个指针都是SomeCommonBase*
类型,所以你可以保证它们属于同一类型。请询问有关指向对象的类型信息。
也就是说,正如@DeadMg所说,你还需要使用operator==
来比较类型信息对象。
C ++标准没有解决动态库的问题。但在任何给定的Windows模块中,您应该是安全的。
干杯&第h。,