sábado, noviembre 11, 2006

De guerras y fugas


Como si no me dejaran muchos trabajos y tareas, mi mamá me quiere poner al quehacer de la casa a mi solita. Hayyy Le voy a declarar la guerra. Lo bueno que no lavé platos porque el grifo tiene una fuga de agua jijiji siii sabotajee jajaja. Y hablando de fugas lo que me paso ahora en la semana:

¡Sin darme cuenta tenía una fuga de memoria horrible a la hora de eliminar los assets!. El administrador de assets lleva una lista de apuntadores a todos los assets de todo tipo, para ello la mágia de la programación orientada a objetos me ayuda. ¿Cómo? Pues la lista es de apuntadores de la clase base: class AssetGenerico, de ahí se derivan todos los assets. Así que nada de llevar apuntadores de cada tipo de asset, solo genéricos.

Al dejar de utilizar los assets, el administrador recorre la lista eliminando cada nodo (o asset, en este caso) con un simple delete. El destructor de cada asset es llamado y se eliminan todos los recursos de la memoria. ¡PERO NO! ¡¡El tonto destructor me estaba viendo la cara!! Por alguna razón el destructor de la clase base era el único que se ejecutaba, pero no de las derivadas. Como resultado una fuga de memoria y una burla a mi persona

Pero ya me explicaron mis amigos que debo de poner la palabrita "virtual" al mismísimo destructor de la clase base. De ésta forma se garantiza que el destructor de la clase derivada será ejecutado: virtual ~AssetGenerico() {}

Otra recomendación que me dieron es eliminar los recursos de cada asset por medio de un método virtual puro declarado en la clase base: void eliminar( void ) = 0; Por lo que cada clase derivada debe de implementarla. El administrador llama al método eliminar de cada apuntador y despues lo borra de memoria. La ventaja de ésto es que el código es mas claro y no estamos expuestos a lo fácil que se nos puede olvidar como funcionan los destructores, bueno, al menos a mí jijiji

Bueno, ya declaré mi ignorancia al mundo ahora me voy. Adiós a todos ¡¡y muchos saludos a todos los que han dejado sus post!! Gracias