-EDIT-
Thanks for the quick response, I’d been having really weird problems with my code and I changed my casts to dynamic_cast and its working perfectly now
-ORIGINAL POST-
Is it safe to cast a pointer of one base class to another base class? To expand on this a bit, will the pointer I’ve marked in the following code not result in any undefined behavior?
class Base1
{
public:
// Functions Here
};
class Base2
{
public:
// Some other Functions here
};
class Derived: public Base1, public Base2
{
public:
// Functions
};
int main()
{
Base1* pointer1 = new Derived();
Base2* pointer2 = (Base2*)pointer1; // Will using this pointer result in any undefined behavior?
return 1;
}
Yes. The C-style cast will only try the following casts:
const_caststatic_caststatic_cast, thenconst_castreinterpret_castreinterpret_cast, thenconst_castIt will use
reinterpret_castand do the wrong thing.If
Base2is polymorphic, i.e, hasvirtualfunctions, the correct cast here isdynamic_cast.If it doesn’t have virtual functions, you can’t do this cast directly, and need to cast down to
Derivedfirst.