C usa Dynamic_cast para convertir un puntero de clase principal en un puntero de subclase, ¿por qué no es necesariamente exitoso?
Este problema involucra el modelo de objetos de c. Generalmente se cree que el tamaño de los objetos de la subclase gt = el tamaño de los objetos de la clase principal. ¿Por qué? Porque las subclases pueden ampliar las clases principales y agregar variables miembro. Si una subclase agrega variables miembro, el espacio de memoria de su objeto será mayor que el del objeto de la clase principal. En este momento, si un puntero que en realidad apunta a la clase principal se ve obligado a convertirse en un puntero de objeto de subclase, el uso de este puntero puede provocar un acceso fuera de límites a la memoria ilegal. Por el contrario, ¿por qué se puede convertir un puntero de subclase en un puntero de clase principal? Debido a que el puntero de la clase principal lo necesita, el objeto de la subclase lo tiene y no habrá acceso ilegal a la memoria.
Esta es la razón por la que es posible que Dynamic_cast no tenga éxito. Si un puntero que realmente apunta a un objeto de subclase se convierte en un puntero de clase principal y luego se vuelve a convertir usando Dynamic_cast, definitivamente tendrá éxito. Sin embargo, si un puntero que realmente apunta a un objeto de clase principal se convierte en un puntero de subclase mediante Dynamic_cast. , definitivamente fallará.