Vai al contenuto
Modulo 3

Memoria e risorse

Padroneggia il modello di proprietà del C++ — dai puntatori grezzi agli smart pointer fino alla semantica di spostamento — per scrivere codice che non perde mai memoria.

Puntatori e riferimenti

  1. Puntatori: indirizzi, dereferenziazione e aritmetica

    Comprendi i puntatori come indirizzi di memoria, impara gli operatori di indirizzo e di dereferenziazione, l'aritmetica dei puntatori all'interno degli array, la correttezza const con i puntatori e quando i puntatori grezzi sono ancora appropriati nel C++ moderno.

  2. Riferimenti: lvalue, rvalue e insidie

    Esplora i riferimenti a lvalue e a rvalue, comprendi le categorie di valore del C++, impara le regole di collasso dei riferimenti e i riferimenti inoltranti, ed evita i bug da riferimenti pendenti.

  3. Memoria dinamica: new, delete e i loro pericoli

    Impara come funziona l'allocazione dinamica con new e delete, comprendi i pericoli delle perdite di memoria, del doppio rilascio e dell'uso dopo il rilascio, e scopri perché il C++ moderno non dovrebbe contenere alcun new/delete grezzo.

Smart pointer

  1. std::unique_ptr: proprietà esclusiva

    Impara come std::unique_ptr fornisce una proprietà esclusiva a costo zero, come usare make_unique, i deleter personalizzati per le risorse C e i pattern delle funzioni factory.

  2. shared_ptr, weak_ptr e grafi di proprietà

    Comprendi la proprietà condivisa con conteggio dei riferimenti tramite shared_ptr, spezza i cicli con weak_ptr, impara che cosa sono il blocco di controllo e l'aliasing e riconosci quando shared_ptr è la scelta sbagliata.

Semantica di spostamento e RAII

  1. Semantica di spostamento e std::move

    Comprendi il problema che la semantica di spostamento risolve, scopri come std::move sia un cast (e non uno spostamento), implementa costruttore e assegnamento di spostamento e impara perché noexcept è cruciale per le prestazioni dei contenitori.

  2. Perfect forwarding e std::forward

    Comprendi perché i riferimenti a rvalue con un nome sono lvalue, impara il pattern canonico di forwarding con std::forward e scopri come emplace_back usa il forwarding variadico per costruire gli oggetti sul posto.

  3. RAII: il pattern fondamentale per le risorse

    Impara il RAII (Resource Acquisition Is Initialization) — il pattern C++ fondamentale per una gestione delle risorse a prova di eccezioni. Implementa wrapper RAII, comprendi lock_guard e scoped_lock e scopri perché i tipi RAII devono essere solo spostabili oppure a conteggio dei riferimenti.

Memoria avanzata

  1. Disposizione in memoria, allineamento e rappresentazione degli oggetti

    Comprendi il padding delle struct e i requisiti di allineamento, ottimizza l'ordine dei membri per ridurre la dimensione, impara che cosa sono le linee di cache e il false sharing e usa le funzionalità del C++20 come [[no_unique_address]] per layout compatti.