Puntatori e memoria

const correctness

const documenta cosa non verrà modificato e blocca scritture accidentali.

Che cos’è const correctness?

const documenta cosa non verrà modificato e blocca scritture accidentali.

Esprimi dati read-only e puntatori modificabili.

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

C
Esegui →
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;
}
Output previsto
12
C++
Esegui →
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';
}
Output previsto
12

Confronto tra C e C++

Pointer-to-const protegge il valore; un const pointer non cambia indirizzo. C++ aggiunge const member function.

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.