Pointer und Speicher

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++

C
Code ausführen →
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;
}
Erwartete Ausgabe
36
C++
Code ausführen →
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';
}
Erwartete Ausgabe
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.