Innove++

C++ Systems Master

Gestión de memoria manual, abstracciones de costo cero, STL y programación moderna de alto rendimiento.

template<typename T>
std::vector<int> v;
auto ptr = std::make_unique<Job>();
constexpr int MAX = 100;
virtual void execute() = 0;
[](auto x){ return x*x; };
using json = nlohmann::json;
std::lock_guard<std::mutex> lock(m);
template<typename T>
std::vector<int> v;
CORE

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

int x = 10; int* ptr = &x; // Puntero: almacena dirección int& ref = x; // Referencia: alias (no puede ser null) *ptr = 20; // Desreferencia: modifica x

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).
// Moderno y seguro auto uPtr = std::make_unique<Data>();
OOP

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).

class Base { public: virtual void draw() const = 0; // Pura virtual virtual ~Base() = default; // Destructor virtual vital };

Sobrecarga de Operadores

Permite definir comportamiento para operadores como +, ==, << en tipos personalizados.

STL

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

std::vector<int> v = {4, 1, 3, 2}; std::sort(v.begin(), v.end()); // Usa IntroSort (Quick + Heap + Insertion)
MODERN

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.

auto add = [](int a, int b) { return a + b; }; std::for_each(v.begin(), v.end(), [](int& n){ n *= 2; });

Multithreading

Librería <thread>, std::async, std::mutex y std::atomic para concurrencia segura.