Aller au contenu
Module 3

Mémoire et ressources

Maîtrisez le modèle de propriété du C++ — des pointeurs bruts aux pointeurs intelligents en passant par la sémantique de déplacement — pour écrire du code qui ne fuit jamais.

Pointeurs et références

  1. Pointeurs : adresses, déréférencement et arithmétique

    Comprenez les pointeurs en tant qu'adresses mémoire, apprenez les opérateurs d'adresse et de déréférencement, l'arithmétique des pointeurs dans les tableaux, la const-correction avec les pointeurs, et quand les pointeurs bruts restent appropriés en C++ moderne.

  2. Références : lvalue, rvalue et pièges

    Explorez les références lvalue et rvalue, comprenez les catégories de valeur du C++, apprenez les règles de fusion des références et les références de transfert, et évitez les bogues de références pendantes.

  3. Mémoire dynamique : new, delete et leurs dangers

    Apprenez comment fonctionne l'allocation dynamique avec new et delete, comprenez les dangers des fuites de mémoire, des doubles libérations et des utilisations après libération, et découvrez pourquoi le C++ moderne ne devrait contenir aucun new/delete brut.

Pointeurs intelligents

  1. std::unique_ptr : la propriété exclusive

    Découvrez comment std::unique_ptr offre une propriété exclusive sans surcoût, comment utiliser make_unique, les suppresseurs personnalisés pour les ressources C et les fonctions fabriques.

  2. shared_ptr, weak_ptr et graphes de propriété

    Comprenez la propriété partagée par comptage de références avec shared_ptr, brisez les cycles avec weak_ptr, découvrez les blocs de contrôle et l'aliasing, et sachez quand shared_ptr n'est pas le bon choix.

Sémantique de déplacement et RAII

  1. Sémantique de déplacement et std::move

    Comprenez le problème que résout la sémantique de déplacement, pourquoi std::move est une conversion (et non un déplacement), implémentez le constructeur de déplacement et l'assignation par déplacement, et découvrez pourquoi noexcept est crucial pour les performances des conteneurs.

  2. Transfert parfait et std::forward

    Comprenez pourquoi les références rvalue nommées sont des lvalues, apprenez le schéma canonique de transfert avec std::forward, et voyez comment emplace_back utilise le transfert variadique pour construire les objets sur place.

  3. RAII : le patron fondamental de gestion des ressources

    Découvrez le RAII (Resource Acquisition Is Initialization, « l'acquisition d'une ressource est une initialisation ») — le patron central du C++ pour une gestion des ressources sûre vis-à-vis des exceptions. Implémentez des enveloppes RAII, comprenez lock_guard et scoped_lock, et apprenez pourquoi les types RAII doivent être déplaçables uniquement ou à comptage de références.

Mémoire avancée

  1. Disposition mémoire, alignement et représentation des objets

    Comprenez le remplissage (padding) des structs et les exigences d'alignement, optimisez l'ordre des membres pour réduire la taille, découvrez les lignes de cache et le faux partage, et utilisez des fonctionnalités C++20 comme [[no_unique_address]] pour des dispositions compactes.