Punteros y memoria

Punteros a función y callbacks

Un callback permite que un algoritmo invoque lógica elegida por el caller.

¿Qué es Punteros a función y callbacks?

Un callback permite que un algoritmo invoque lógica elegida por el caller.

Pasa comportamiento a otra función.

Puntos importantes

  • Todo puntero debe apuntar a un objeto vivo compatible o ser null.
  • Libera exactamente una vez cada allocation propia.
  • Expresa ownership y const con claridad.

Ejemplos de código C y C++

C
Ejecutar →
main.c
#include <stdio.h>

int square(int value) { return value * value; }
int apply(int value, int (*operation)(int)) { return operation(value); }

int main(void) {
    printf("%d\n", apply(6, square));
    return 0;
}
Resultado esperado
36
C++
Ejecutar →
main.cpp
#include <functional>
#include <iostream>

int apply(int value, const std::function<int(int)>& operation) {
    return operation(value);
}

int main() {
    int factor = 6;
    std::cout << apply(factor, [](int value) { return value * value; }) << '\n';
}
Resultado esperado
36

Comparación entre C y C++

C usa un tipo de puntero a función explícito; C++ ofrece lambdas y std::function con estado.

C

Ownership y limpieza son convenciones manuales.

C++

Los contenedores y RAII codifican ownership y limpieza en el lifetime.

Ejercicios prácticos

Ejecuta ambas versiones y modifícalas para observar sus garantías.

  • Prueba null y fallos de allocation.
  • Usa AddressSanitizer y UndefinedBehaviorSanitizer.
  • Documenta el ownership de cada puntero.