Pointer und Speicher

const-Correctness

const dokumentiert Unveränderlichkeit und lässt den Compiler unerlaubte Schreibzugriffe ablehnen.

Was ist const-Correctness?

const dokumentiert Unveränderlichkeit und lässt den Compiler unerlaubte Schreibzugriffe ablehnen.

Drücke schreibgeschützte Daten und veränderliche Pointer genau aus.

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 sum(const int *values, size_t count) {
    int total = 0;
    for (size_t i = 0; i < count; ++i) total += values[i];
    return total;
}

int main(void) {
    const int values[] = {2, 4, 6};
    printf("%d\n", sum(values, 3));
    return 0;
}
Erwartete Ausgabe
12
C++
Code ausführen →
main.cpp
#include <array>
#include <iostream>

int sum(const std::array<int, 3>& values) {
    int total = 0;
    for (int value : values) total += value;
    return total;
}

int main() {
    const std::array values{2, 4, 6};
    std::cout << sum(values) << '\n';
}
Erwartete Ausgabe
12

Vergleich zwischen C und C++

Pointer-to-const schützt den Wert, ein const Pointer die Adresse. C++ bietet zusätzlich const-Memberfunktionen.

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.