Puntatori e Memoria Dinamica in C++
Gestisci la memoria in modo efficiente ed evita memory leak
I puntatori e la gestione dinamica della memoria sono concetti avanzati ma fondamentali in C++ per scrivere programmi efficienti e flessibili.
1. Puntatori e Riferimenti
📌 Cosa sono i puntatori?
Variabili che contengono indirizzi di memoria di altre variabili. Permettono di manipolare direttamente la memoria.
1.1 Dichiarazione e Operatori
*
Dereferenziazione
Accede al valore puntato
*ptr
&
Indirizzo
Restituisce l’indirizzo di una variabile
&variabile
→
Freccia
Accede a membri tramite puntatore
ptr->membro
1.2 Differenza tra Puntatori e Riferimenti
P
Puntatori
Riassegnabili: Sì
Nullabile: Sì (nullptr)
Sintassi: *ptr, &variabile
int *ptr = &x;
R
Riferimenti
Riassegnabili: No
Nullabile: No
Sintassi: int &ref = x;
int &ref = x;
2. Allocazione Dinamica della Memoria
📌 Perché usare l’allocazione dinamica?
Quando non conosci a priori la quantità di memoria necessaria durante la compilazione.
2.1 Operatori new e delete
new – Allocazione
Singolo elemento: new tipo
Array: new tipo[dimensione]
int *ptr = new int;
delete – Deallocazione
Singolo elemento: delete ptr
Array: delete[] array
delete ptr;
2.2 Esempio: Allocazione Singolo Elemento
2.3 Esempio: Array Dinamico
⚠️ ATTENZIONE: Usare delete per array o delete[] per singoli elementi causa comportamenti indefiniti!
3. Best Practices
Regole fondamentali:
✅ Inizializza sempre
Assicurati che ogni puntatore sia inizializzato (preferibilmente a nullptr)
✅ Dealloca sempre
Usa delete o delete[] per liberare la memoria non più necessaria
✅ Evita doppia delete
Deallocare la stessa memoria più volte causa comportamenti indefiniti
✅ Usa riferimenti quando possibile
Più semplici e meno soggetti a errori rispetto ai puntatori
✅ Smart Pointer (C++11+)
Preferisci std::unique_ptr e std::shared_ptr per gestione automatica
3.1 Esempio: Gestione Sicura
🎯 Esercizi Pratici
Metti in pratica la gestione dinamica della memoria
Esercizio 1: Gestione Array Dinamico
Obiettivo: Creare e gestire un array dinamico con input utente.
Esercizio 2: Scambio con Puntatori
Obiettivo: Scambiare valori usando puntatori.
5. Esercizi Avanzati
Esercizio 3: Matrice Dinamica
Obiettivo: Creare e gestire una matrice 2D dinamica.
Esercizio 4: Gestione Stringhe Dinamiche
Obiettivo: Manipolare stringhe con allocazione dinamica.
Conclusioni
Punti chiave da ricordare:
✅ Puntatori vs Riferimenti
Puntatori: flessibili ma complessi. Riferimenti: semplici ma vincolati
✅ Allocazione Dinamica
new/delete per memoria flessibile, fondamentale per array di dimensione sconosciuta
✅ Gestione Sicura
Sempre inizializzare, sempre deallocare, usare nullptr, evitare doppie delete
✅ Best Practices
Preferire riferimenti quando possibile, considerare smart pointer in C++ moderno
I puntatori e la gestione dinamica della memoria offrono un controllo granulare sulle risorse del computer. Con una comprensione solida di questi concetti, sarai in grado di scrivere codice più efficiente, modulare e sicuro. Ricorda: con grandi poteri (puntatori) derivano grandi responsabilità (gestione memoria)! 🚀
🚀 Esercitazioni Pratiche C++
Metti in pratica ciò che hai imparato con queste esercitazioni complete
📚 Tutte le Esercitazioni
12 esercitazioni complete per padroneggiare il C++