C++ Academy · Lezione

Quando usare puntatori o riferimenti

Scelga tra puntatori e riferimenti in base all'opzionalità e alla semantica dell'ownership

Lezione 4 di 413 passaggi

Quando usare puntatori o riferimenti è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 4 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.

Strumenti diversi per esigenze diverse

Riferimenti e puntatori consentono entrambi di accedere indirettamente a un altro oggetto, ma con semantiche diverse. Usi ciascuno nello scenario più adatto.

Riferimenti per destinazioni obbligatorie

Un riferimento non può essere nullo né ricollegato. Usi un parametro di riferimento quando la funzione ha sempre bisogno di un oggetto reale.

void render(const Image& img);   // must have an image

Puntatori per destinazioni opzionali

Un puntatore può essere nullo. Usi un puntatore quando l'argomento è realmente opzionale.

void render(const Image* img);   // nullptr means "skip"

Puntatori quando è necessario riassegnare

I puntatori possono essere reindirizzati verso oggetti diversi. Li usi quando l'indirezione cambia durante l'algoritmo, ad esempio per un cursore mobile o per il nodo corrente.

Node* current = head;
while (current) {
    process(current);
    current = current->next;
}

Riferimenti per contenitori di riferimenti?

Non è possibile avere un std::vector<T&>. Usi std::vector<std::reference_wrapper<T>> oppure memorizzi dei puntatori.

Restituire riferimenti

Restituisca un riferimento quando il risultato sopravvive alla chiamata e il chiamante può usarlo direttamente (membri, elementi di contenitori).

std::string& Person::name() { return name_; }

Restituire puntatori

Restituisca un puntatore quando la funzione può non restituire alcun risultato o quando la gestione della proprietà non è chiara. Nel codice moderno, preferisca std::optional o i puntatori intelligenti.

Membri di classe

Memorizzare un riferimento come membro vincola l'oggetto referenziato per tutta la durata dell'oggetto e impedisce l'assegnazione mediante copia. I membri puntatore sono più flessibili, ma richiedono controlli sui valori nulli.

Polimorfismo

Sia i puntatori sia i riferimenti possono essere usati per il polimorfismo. Memorizzi puntatori alla classe base nei contenitori (un vector non può contenere riferimenti); usi riferimenti per i parametri quando il valore nullo non è valido.

I puntatori intelligenti sono migliori dei proprietari grezzi

Usi i puntatori grezzi solo per l'indirezione non proprietaria. La proprietà dovrebbe essere gestita da std::unique_ptr o std::shared_ptr.

Schema decisionale rapido

Guida rapida:

  • Oggetto sempre valido → riferimento
  • Potrebbe essere assente → puntatore o std::optional
  • Indirezione che cambia → puntatore
  • Gestisce la memoria → puntatore intelligente
  • In un contenitore → puntatore (i vector di riferimenti sono poco pratici)

Verifica rapida

Qual è il tipo di parametro migliore per una funzione che richiede un oggetto non nullo?

Riepilogo

Usi i riferimenti per destinazioni obbligatorie e fisse; i puntatori per destinazioni opzionali o mobili. Per la proprietà, preferisca i puntatori intelligenti. I contenitori richiedono in genere puntatori, non riferimenti.

Gratis per iniziare

Impara C++ con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
51
Lezioni
203

Domande Frequenti

La lezione «Quando usare puntatori o riferimenti» è gratuita?

Sì — il testo completo di «Quando usare puntatori o riferimenti» è 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 «Quando usare puntatori o riferimenti»?

Scelga tra puntatori e riferimenti in base all'opzionalità e alla semantica dell'ownership 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 4 di 4.

Quanto tempo richiede la lezione «Quando usare puntatori o riferimenti»?

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

  1. Puntatori grezzi e operatore address-of
  2. Dereferenziazione e aritmetica dei puntatori
  3. nullptr e sicurezza dei puntatori nulli
  4. Quando usare puntatori o riferimenti
← Torna a C++ Academy