Funktionspointer und Callbacks
Ein Callback lässt einen Algorithmus vom Aufrufer gewähltes Verhalten ausführen.
Was ist Funktionspointer und Callbacks?
Ein Callback lässt einen Algorithmus vom Aufrufer gewähltes Verhalten ausführen.
Übergib Verhalten an eine andere Funktion.
Wichtige Punkte
- Jeder Pointer verweist auf ein lebendes kompatibles Objekt oder ist null.
- Jede eigene Allokation wird genau einmal freigegeben.
- Formuliere Ownership und const-Schnittstellen eindeutig.
Codebeispiele in C und 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
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
Vergleich zwischen C und C++
C verwendet einen expliziten Funktionspointertyp; C++ kann Lambdas und std::function mit zusätzlichem Zustand einsetzen.
C
Ownership und Aufräumen sind vom Programmierer durchgesetzte Konventionen.
C++
Container und RAII kodieren Ownership und Aufräumen in Objektlebenszeiten.
Übungsaufgaben
Führe beide Versionen aus und untersuche die unterschiedlichen Garantien.
- Teste null und Allokationsfehler.
- Verwende AddressSanitizer und UndefinedBehaviorSanitizer.
- Dokumentiere Besitz jedes Pointers.