Puntatori a funzione e callback
Un callback consente a un algoritmo di invocare logica scelta dal caller.
Che cos’è Puntatori a funzione e callback?
Un callback consente a un algoritmo di invocare logica scelta dal caller.
Passa un comportamento a un’altra funzione.
Punti importanti
- Ogni puntatore deve riferirsi a un oggetto vivo compatibile o essere null.
- Ogni allocation posseduta va liberata una sola volta.
- Esprimi chiaramente ownership e const.
Esempi di codice C e C++
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;
}
36
C++
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';
}
36
Confronto tra C e C++
C usa un tipo function pointer esplicito; C++ offre lambda e std::function con stato.
C
Ownership e cleanup sono convenzioni manuali.
C++
Container e RAII codificano ownership e cleanup nel lifetime.
Esercizi pratici
Esegui entrambe le versioni e modificale per osservare le diverse garanzie.
- Testa null e fallimenti di allocation.
- Usa AddressSanitizer e UndefinedBehaviorSanitizer.
- Documenta ownership di ogni puntatore.