0Pricing
C++ Academy · Lezione

Il principio RAII

Associare le risorse alla durata degli oggetti

Il principio RAII è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 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 cosa significa RAII

RAII è l'acronimo di Resource Acquisition Is Initialization. Una risorsa viene acquisita nel costruttore e rilasciata nel distruttore, collegandone la durata a quella di un oggetto.

L'idea fondamentale

Avvolga ogni risorsa, dalla memoria ai file, dai lock ai socket, in un oggetto. Quando l'oggetto esce dall'ambito, il suo distruttore libera automaticamente la risorsa.

#include <iostream>

class Resource {
public:
    Resource() { std::cout << "acquire\n"; }
    ~Resource() { std::cout << "release\n"; }
};

int main() {
    Resource r;   // acquired
}                 // released automatically

Perché RAII è potente

La pulizia è garantita anche se una funzione termina in anticipo o viene generata un'eccezione. Non può dimenticare di rilasciare una risorsa che ha avvolto in questo modo.

Un piccolo wrapper RAII

Ecco un proprietario di un int che libera la memoria nell'heap nel distruttore: nei punti di chiamata non serve alcun delete manuale.

#include <iostream>

class IntBox {
    int* p;
public:
    IntBox(int v) : p(new int(v)) {}
    ~IntBox() { delete p; }
    int get() const { return *p; }
};

int main() {
    IntBox b(42);
    std::cout << b.get() << "\n";
}

Pulizia in caso di ritorno anticipato

Poiché il distruttore viene eseguito all'uscita dall'ambito, anche un return anticipato attiva la pulizia.

#include <iostream>

class Guard {
public:
    ~Guard() { std::cout << "cleaned\n"; }
};

void work(bool stop) {
    Guard g;
    if (stop) return;   // g still cleaned
    std::cout << "more work\n";
}

int main() { work(true); }

Pulizia in caso di eccezioni

Se un'eccezione risale lo stack, ogni oggetto RAII completamente costruito viene distrutto lungo il percorso. Le risorse non rimangono mai abbandonate.

Tipi RAII standard

La libreria standard è ricca di tipi RAII: std::unique_ptr, std::lock_guard, std::fstream e std::vector eseguono tutti la pulizia nei rispettivi distruttori.

#include <vector>
#include <memory>

int main() {
    std::vector<int> v{1, 2, 3};        // frees its buffer
    auto p = std::make_unique<int>(9);  // frees its int
}

Nessun codice di pulizia manuale

Con RAII smette di scrivere manualmente delete, fclose o unlock. Le chiamate ai distruttori inserite dal compilatore fanno tutto al posto suo.

Un solo proprietario per risorsa

Ogni risorsa dovrebbe avere un solo proprietario RAII responsabile del suo rilascio. Per condividere la proprietà in modo sicuro servono tipi speciali come std::shared_ptr.

RAII è componibile

Un oggetto RAII può contenere altri oggetti RAII. La distruzione si propaga automaticamente, così anche le risorse complesse vengono ripulite correttamente.

#include <memory>
#include <vector>

struct Session {
    std::vector<int> data;                 // RAII
    std::unique_ptr<int> token;            // RAII
};   // both members freed automatically

RAII rispetto alla gestione manuale

La gestione manuale è soggetta a errori; RAII rende la pulizia corretta il comportamento predefinito. Preferisca sempre i wrapper RAII alle coppie grezze di acquisizione e rilascio.

Verifica rapida

Verifichi la sua comprensione di RAII.

Riepilogo

Ha imparato il principio di RAII: acquisire nel costruttore e rilasciare nel distruttore. Questo garantisce la pulizia in caso di uscita normale, ritorno anticipato ed eccezioni. La libreria standard usa RAII ovunque, e anche il suo codice dovrebbe farlo.

Domande Frequenti

La lezione «Il principio RAII» è gratuita?

Sì — il testo completo di «Il principio RAII» è 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 «Il principio RAII»?

Associare le risorse alla durata degli oggetti 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 1 di 4.

Quanto tempo richiede la lezione «Il principio RAII»?

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. Il principio RAII
  2. Distruttori e pulizia
  3. Regola del tre/cinque
  4. Guardie di ambito
← Torna a C++ Academy