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
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.
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.
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
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.
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
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.
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.
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.