I have a set of polymorphic C++ classes and they are all instantiated by the same module (Windows DLL). Now having two pointers to such classes and having called typeid
:
SomeCommonBase* first = ...; //valid pointer
SomeCommonBase* second = ...; //valid pointer
const type_info& firstInfo = typeid( first );
const type_info& secondInfo = typeid( second );
can I compare retrieved type_info
addresses
if( &firstInfo == &secondInfo ) {
//objects are of the same class
} else {
//objects are of different classes
}
or use ==
if( firstInfo == secondInfo ) {
//objects are of the same class
} else {
//objects are of different classes
}
to detect whether objects are of (exactly) the same class or of different classes? Is it guaranteed to work when objects are instantiated from within the same module?
As I'm writing this, your code is
It should not compile because
typeid
returns a reference toconst
.Worse, you are asking for type info about the pointers. Both pointers are of type
SomeCommonBase*
, so you're guaranteed that they are of the same type. Ask instead for type info about the pointed to objects.That said, as @DeadMg remarked, you also need to use
operator==
to compare type info objects.The C++ standard does not address the issue of dynamic libraries. But within any given Windows module you should be safe.
Cheers & hth.,
You can only retrieve
const
type_info references, and you should always useoperator==
.