CodeSOD: A Type of Type Safety Note

CodeSOD: A Type of Type Safety

The author criticizes the common practice of explaining object-oriented concepts using biological taxonomies due to its limitations, especially overemphasizing inheritance. They then discuss a C++ codebase where developers misunderstand key object-oriented principles, leading to problematic code. An example is a StealTentacle function that uses runtime type checks (IS_INSTANCE_OF) instead of polymorphism to determine if an animal has tentacles.The IS_INSTANCE_OF macro incorrectly uses dynamic_cast with a C-style cast, which can lead to unintended behavior. The macro attempts to force the object pointer to a base type before checking its actual type, demonstrating a lack of understanding of C++ casting rules. The developers' comments reveal their confusion about dynamic_cast, as it can perform crosscasting between related derived types, not just checking for direct inheritance.The author argues that such runtime type checks are an anti-pattern and that the problem being solved could be handled more elegantly using the type system itself. The code further illustrates this by using more C-style casts to attempt to downcast after the macro check. Ultimately, the author echoes the sentiment that while object-oriented features can be powerful, their misuse, especially with runtime type information, can result in complex and inefficient code, undermining the elegance of the language.