Analizamos uno de los problemas más importantes en el desarrollo en
#C++ : el encapsulamiento de la gestión de recursos. Los objetos que gestionan recursos, como memoria reservada, deben conocer y seguir La Regla de los Tres (The Rule of Three). Explicamos por qué, qué es la regla de los tres, como aplicarla y cómo gestionar correctamente los recursos mediante los métodos especiales de clase.
Contenido Detallado:
- Recordatorio importante: Para cada #new se debe añadir siempre un #delete, en el mismo momento de escribir new.
- Observamos el funcionamiento de las reservas de #memoria en nuestro programa.
- Recordatorio: std::cout reserva memoria para el buffer de escritura en consola. std::string también lo hace.
- Problema al añadir delete en el destructor de una clase que hace new: se hace delete 2 veces.
- "Invalid free" es un delete de una memoria que no se encuentra reservada, y lleva a comportamiento no definido.
- Visualizando los momentos en que se llama al destructor y se hace delete
- Remarcando la importancia de entender estos conceptos y lo mucho que los valoran en la industria
- Funcionamiento de los constructores por defecto en C++, en particular el constructor de copia por defecto
- Uso de https://cppinsights.io para ver cómo el compilador interpreta nuestro código y qué métodos por defecto se generan en nuestros objetos
- Revisando métodos y mencionando lo que son las distintas partes: #explicit, #constexpr, constructor de copia, #rvalue #references y #move #constructor
- Revisando el funcionamiento de la sintactic sugar de C++ con los operadores salida como los que se usan con std::cout.
- Analizando por qué estamos creando 2 GameObjects cuando pensamos que sólo creamos uno, y como entra en juego el constructor de copia
- Analizando los problemas que nos genera el constructor de copia por defecto al realizar un copiado byte a byte (dos punteros a una única memoria reservada)
- Visualizando el layout de nuestros objetos en memoria, el #heap, el #stack y como funciona el proceso de copia (rep movs en ensamblador)
- Introduciendo y explicando "The Rule of Three" en C++98: cuando sea necesario definir una de las 3 funciones especiales propias para un objeto (constructor de copia, operador asignación o destructor) se deben definir las 3
- Definición de constructor de copia propio para resolver el problema
- Explicando el uso de #std::memcpy para hacer copias de memoria de trozos de bytes en lugar de hacerlo a mano con bucles
- Reproduciendo y analizando el constructor de copia byte a byte
- Mejorando el constructor de copia para que cree un nuevo #Sprite
- Revisión: cuidado al usar el operador indirección con punteros en crudo
- Revisión de problemas que suceden en el mantenimiento de las clases y objetos en su evolución a lo largo del tiempo
Contenido Detallado:
- Recordatorio importante: Para cada #new se debe añadir siempre un #delete, en el mismo momento de escribir new.
- Observamos el funcionamiento de las reservas de #memoria en nuestro programa.
- Recordatorio: std::cout reserva memoria para el buffer de escritura en consola. std::string también lo hace.
- Problema al añadir delete en el destructor de una clase que hace new: se hace delete 2 veces.
- "Invalid free" es un delete de una memoria que no se encuentra reservada, y lleva a comportamiento no definido.
- Visualizando los momentos en que se llama al destructor y se hace delete
- Remarcando la importancia de entender estos conceptos y lo mucho que los valoran en la industria
- Funcionamiento de los constructores por defecto en C++, en particular el constructor de copia por defecto
- Uso de https://cppinsights.io para ver cómo el compilador interpreta nuestro código y qué métodos por defecto se generan en nuestros objetos
- Revisando métodos y mencionando lo que son las distintas partes: #explicit, #constexpr, constructor de copia, #rvalue #references y #move #constructor
- Revisando el funcionamiento de la sintactic sugar de C++ con los operadores salida como los que se usan con std::cout.
- Analizando por qué estamos creando 2 GameObjects cuando pensamos que sólo creamos uno, y como entra en juego el constructor de copia
- Analizando los problemas que nos genera el constructor de copia por defecto al realizar un copiado byte a byte (dos punteros a una única memoria reservada)
- Visualizando el layout de nuestros objetos en memoria, el #heap, el #stack y como funciona el proceso de copia (rep movs en ensamblador)
- Introduciendo y explicando "The Rule of Three" en C++98: cuando sea necesario definir una de las 3 funciones especiales propias para un objeto (constructor de copia, operador asignación o destructor) se deben definir las 3
- Definición de constructor de copia propio para resolver el problema
- Explicando el uso de #std::memcpy para hacer copias de memoria de trozos de bytes en lugar de hacerlo a mano con bucles
- Reproduciendo y analizando el constructor de copia byte a byte
- Mejorando el constructor de copia para que cree un nuevo #Sprite
- Revisión: cuidado al usar el operador indirección con punteros en crudo
- Revisión de problemas que suceden en el mantenimiento de las clases y objetos en su evolución a lo largo del tiempo
C++ : La regla de los tres, constructores y copias 6502 instruction set | |
42 Likes | 42 Dislikes |
589 views views | 2.28K followers |
Science & Technology Creative Commons Attribution licence (reuse allowed) | Upload TimePublished on 25 Feb 2019 |
Không có nhận xét nào:
Đăng nhận xét