1. Gestión de Memoria y Punteros
C++ da control total sobre la memoria. Entender el Stack (pila) y el Heap (montón) es crítico.
Stack vs Heap
Variables locales van al Stack (rápido, automático). Memoria dinámica (new) va al Heap (manual, persistente).
Punteros y Referencias
Smart Pointers (RAII)
En C++ Moderno, evitamos new/delete crudos. Usamos RAII (Resource Acquisition Is Initialization).
std::unique_ptr: Propiedad exclusiva. Se borra al salir del ámbito.std::shared_ptr: Propiedad compartida (conteo de referencias).
2. Clases y Polimorfismo
Clases y Encapsulamiento
Separación de interfaz (.h) e implementación (.cpp). Control de acceso: public, private, protected.
Herencia y Virtualidad
Para lograr polimorfismo en tiempo de ejecución, usamos funciones virtuales. Esto crea una V-Table (tabla de punteros a funciones).
Sobrecarga de Operadores
Permite definir comportamiento para operadores como +, ==, << en tipos personalizados.
3. Templates y la STL
La Standard Template Library provee contenedores y algoritmos genéricos de alto rendimiento.
Contenedores Secuenciales
std::vector: Array dinámico contiguo. O(1) acceso, O(1) push back amortizado. Default choice.std::list: Lista doblemente enlazada.std::deque: Cola de doble extremo.
Contenedores Asociativos
std::map: Árbol Rojo-Negro (Ordenado, O(log n)).std::unordered_map: Tabla Hash (Desordenado, O(1)).
Algoritmos
4. C++11 / 14 / 17 / 20
Características que transformaron el lenguaje.
Semántica de Movimiento (Move Semantics)
Evita copias costosas transfiriendo recursos de objetos temporales (r-values). Uso de std::move y constructores de movimiento.
Lambdas
Funciones anónimas in-situ. Capturan variables del entorno.
Multithreading
Librería <thread>, std::async, std::mutex y std::atomic para concurrencia segura.