nullptr e sicurezza dei puntatori nulli
Usi nullptr invece di NULL o 0 e prevenga le dereferenziazioni di puntatori nulli
nullptr e sicurezza dei puntatori nulli è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Che cos'è un puntatore nullo?
Un puntatore nullo è un valore speciale che non punta a nulla. Dereferenziarlo produce un comportamento indefinito e di solito causa un arresto per errore di segmentazione.
nullptr nel C++ moderno
A partire da C++11, la parola chiave nullptr rappresenta un literal di puntatore nullo tipizzato. Lo preferisca a NULL o 0.
int* p1 = nullptr;
int* p2 = NULL; // legacy macro
int* p3 = 0; // legacy literalPerché nullptr?
NULL è semplicemente una macro per 0. Può confondere la risoluzione degli overload tra int e int*. nullptr ha il tipo univoco std::nullptr_t.
void f(int);
void f(int*);
f(NULL); // calls f(int) -- surprising!
f(nullptr); // calls f(int*) -- correctVerificare se è nullo
I puntatori vengono convertiti implicitamente in bool: un puntatore non nullo vale true, uno nullo vale false.
if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";Inizializzare sempre
I puntatori non inizializzati contengono valori casuali e sembrano puntare da qualche parte. Li inizializzi sempre, anche solo a nullptr.
int* p; // BAD: undefined contents
int* q = nullptr; // GOODDereferenziare un puntatore nullo
Leggere o scrivere tramite un puntatore nullo produce un comportamento indefinito. Nella maggior parte dei sistemi desktop causa un errore di segmentazione. Nei dispositivi embedded può corrompere la memoria senza segnalarlo.
Controlli difensivi
Esegua un controllo prima di dereferenziare nelle API pubbliche o quando il chiamante potrebbe passare un valore nullo.
void process(int* data) {
if (!data) return;
*data *= 2;
}Riferimenti invece di puntatori
Se il valore nullo non ha mai un significato valido, usi un parametro di riferimento. Il compilatore garantisce che il riferimento sia associato a qualcosa.
// Before
void f(Widget* w); // can be null?
// After
void f(Widget& w); // must be a real widgetstd::optional per i valori opzionali
C++17 ha introdotto std::optional<T> per esprimere la semantica "forse un valore", più chiara di un puntatore nullable nei contesti che non prevedono allocazione.
#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;Puntatori intelligenti e valori nulli
Anche std::unique_ptr e std::shared_ptr possono essere nulli. Vengono convertiti in bool per i controlli e reimpostati con = nullptr.
Insidia: puntatore pendente dopo delete
Dopo delete p, il puntatore contiene ancora il vecchio indirizzo. Lo reimposti: p = nullptr;. I puntatori intelligenti lo fanno automaticamente.
Verifica rapida
Quale literal di puntatore nullo dovrebbe usare nel C++ moderno?
Riepilogo
Usi nullptr per i valori di puntatore nullo. Inizializzi sempre i puntatori. Esegua un controllo prima di dereferenziare oppure, meglio ancora, usi riferimenti e std::optional quando il valore nullo non è mai valido.
Domande Frequenti
La lezione «nullptr e sicurezza dei puntatori nulli» è gratuita?
Sì — il testo completo di «nullptr e sicurezza dei puntatori nulli» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «nullptr e sicurezza dei puntatori nulli»?
Usi nullptr invece di NULL o 0 e prevenga le dereferenziazioni di puntatori nulli Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «nullptr e sicurezza dei puntatori nulli»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Puntatori grezzi e operatore address-of
- Dereferenziazione e aritmetica dei puntatori
- nullptr e sicurezza dei puntatori nulli
- Quando usare puntatori o riferimenti