Pointeurs et mémoire

Pointeurs de fonction et callbacks

Un callback permet à un algorithme d’appeler le comportement choisi par son utilisateur.

Qu’est-ce que Pointeurs de fonction et callbacks ?

Un callback permet à un algorithme d’appeler le comportement choisi par son utilisateur.

Transmettez un comportement à une autre fonction.

Points importants

  • Un pointeur doit viser un objet vivant compatible ou être null.
  • Chaque allocation possédée doit être libérée exactement une fois.
  • Exprimez clairement ownership et const.

Exemples de code C et C++

C
Exécuter →
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;
}
Résultat attendu
36
C++
Exécuter →
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';
}
Résultat attendu
36

Comparaison entre C et C++

C utilise un type de pointeur de fonction explicite ; C++ peut employer des lambdas et std::function avec état.

C

Ownership et nettoyage sont des conventions gérées manuellement.

C++

Les conteneurs et RAII encodent ownership et nettoyage dans la durée de vie.

Exercices pratiques

Exécutez les deux versions puis modifiez-les pour observer leurs garanties.

  • Testez null et les échecs d’allocation.
  • Utilisez AddressSanitizer et UndefinedBehaviorSanitizer.
  • Documentez l’ownership de chaque pointeur.