Libérer la mémoire avec 'delete'
Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 7 sur 56.
Lorsque vous allouez de la mémoire dynamiquement en utilisant new, cette mémoire ne disparaît pas automatiquement lorsque vous avez fini de l'utiliser. Contrairement aux variables classiques qui sont nettoyées automatiquement, la mémoire allouée dynamiquement reste utilisée jusqu'à ce que vous la libériez explicitement. C'est là que le mot-clé delete devient essentiel.
Le mot-clé delete libère la mémoire qui a été précédemment allouée avec new. Lorsque vous utilisez delete, vous indiquez au système que vous avez fini d'utiliser cette mémoire et qu'elle peut être réutilisée à d'autres fins :
int* ptr = new int(42); // Allouer de la mémoire
// Utiliser la mémoire...
delete ptr; // Libérer la mémoireLa règle fondamentale de la gestion dynamique de la mémoire est simple : pour chaque new, il doit y avoir un delete correspondant. Si vous oubliez de supprimer la mémoire allouée dynamiquement, vous créez une fuite de mémoire - votre programme continue de conserver de la mémoire qu'il n'utilise plus, ce qui peut finir par épuiser la mémoire disponible de votre système.
Après avoir appelé delete sur un pointeur, ce pointeur devient invalide et ne doit plus être utilisé. C'est une bonne pratique de définir le pointeur sur nullptr après la suppression pour éviter de l'utiliser accidentellement.
Défi
FacileCréez un programme qui démontre le cycle de vie complet de la mémoire dynamique en allouant de la mémoire avec new, en l'utilisant, puis en la libérant correctement avec delete.
Les entrées suivantes seront fournies :
- Une valeur entière à stocker dans la mémoire allouée dynamiquement
- Une deuxième valeur entière pour mettre à jour la valeur stockée
Votre programme doit :
- Utiliser
newpour allouer dynamiquement de la mémoire pour un entier et stocker le pointeur dans une variable nomméedynamicPtr - Attribuer la première valeur d'entrée à la mémoire allouée dynamiquement en utilisant l'opérateur de déréférencement
- Afficher la valeur initiale stockée dans la mémoire allouée dynamiquement
- Mettre à jour la valeur dans la mémoire allouée dynamiquement avec la deuxième valeur d'entrée
- Afficher la valeur mise à jour
- Utiliser
deletepour libérer la mémoire allouée dynamiquement - Définir le pointeur sur
nullptraprès la suppression - Afficher un message de confirmation indiquant que la mémoire a été libérée
Utilisez le format de sortie exact suivant :
Initial value: [first value]
Updated value: [second value]
Memory freed successfullyAide-mémoire
Le mot-clé delete libère la mémoire qui a été précédemment allouée avec new :
int* ptr = new int(42); // Allouer de la mémoire
// Utiliser la mémoire...
delete ptr; // Libérer la mémoirePour chaque new, il doit y avoir un delete correspondant pour éviter les fuites de mémoire.
Après avoir appelé delete, définissez le pointeur sur nullptr pour éviter d'utiliser accidentellement de la mémoire invalide :
delete ptr;
ptr = nullptr;Essayez vous-même
#include <iostream>
using namespace std;
int main() {
// Lire les valeurs d'entrée
int firstValue, secondValue;
cin >> firstValue;
cin >> secondValue;
// TODO : Écrivez votre code ci-dessous
// 1. Allouer de la mémoire en utilisant new et stocker dans dynamicPtr
// 2. Assigner firstValue à la mémoire allouée
// 3. Afficher la valeur initiale
// 4. Mettre à jour avec secondValue
// 5. Afficher la valeur mise à jour
// 6. Libérer la mémoire et définir le pointeur sur nullptr
// 7. Afficher le message de confirmation
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche