Liberare la memoria con 'delete'
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 7 di 56.
Quando allochi memoria dinamicamente usando new, quella memoria non scompare automaticamente quando hai finito di usarla. A differenza delle variabili normali, che vengono ripulite automaticamente, la memoria allocata dinamicamente rimane in uso finché non la liberi esplicitamente. È qui che la parola chiave delete diventa essenziale.
La parola chiave delete dealloca la memoria che era stata precedentemente allocata con new. Quando usi delete, stai dicendo al sistema che hai finito di usare quella memoria e che può essere riutilizzata per altri scopi:
int* ptr = new int(42); // Alloca la memoria
// Usa la memoria...
delete ptr; // Libera la memoriaLa regola fondamentale della gestione dinamica della memoria è semplice: per ogni new, deve esserci un delete corrispondente. Se dimentichi di eliminare la memoria allocata dinamicamente, crei una perdita di memoria: il tuo programma continua a trattenere memoria che non usa più, il che può portare il sistema a esaurire la memoria disponibile.
Dopo aver chiamato delete su un puntatore, quel puntatore diventa non valido e non dovrebbe essere usato di nuovo. È buona norma impostare il puntatore su nullptr dopo averlo eliminato, per evitare di usarlo accidentalmente.
Sfida
FacileCrea un programma che dimostri l’intero ciclo di vita della memoria dinamica: allocala con new, usala e poi deallocala correttamente con delete.
Verranno forniti i seguenti input:
- Un valore intero da memorizzare nella memoria allocata dinamicamente
- Un secondo valore intero per aggiornare il valore memorizzato
Il programma dovrebbe:
- Usare
newper allocare dinamicamente memoria per un intero e memorizzare il puntatore in una variabile chiamatadynamicPtr - Assegnare il primo valore di input alla memoria allocata dinamicamente usando l’operatore di dereferenziazione
- Stampare il valore iniziale memorizzato nella memoria allocata dinamicamente
- Aggiornare il valore nella memoria allocata dinamicamente impostandolo al secondo valore di input
- Stampare il valore aggiornato
- Usare
deleteper liberare la memoria allocata dinamicamente - Impostare il puntatore a
nullptrdopo l’eliminazione - Stampare un messaggio di conferma che indichi che la memoria è stata liberata
Usa esattamente il seguente formato di output:
Initial value: [first value]
Updated value: [second value]
Memory freed successfullyProvalo tu
#include <iostream>
using namespace std;
int main() {
// Leggi i valori di input
int firstValue, secondValue;
cin >> firstValue;
cin >> secondValue;
// TODO: Scrivi il tuo codice qui sotto
// 1. Alloca la memoria usando new e memorizza il puntatore in dynamicPtr
// 2. Assegna firstValue alla memoria allocata
// 3. Stampa il valore iniziale
// 4. Aggiorna il valore con secondValue
// 5. Stampa il valore aggiornato
// 6. Libera la memoria e imposta il puntatore a nullptr
// 7. Stampa il messaggio di conferma
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online