Gestione della memoria C ++: nuovo ed elimina

In questo tutorial impareremo a gestire la memoria in modo efficace in C ++ utilizzando nuove operazioni e operazioni di cancellazione con l'aiuto di esempi.

Il C ++ ci consente di allocare la memoria di una variabile o di un array in fase di esecuzione. Questo è noto come allocazione dinamica della memoria.

In altri linguaggi di programmazione come Java e Python, il compilatore gestisce automaticamente le memorie assegnate alle variabili. Ma questo non è il caso in C ++.

In C ++, abbiamo bisogno di deallocare manualmente la memoria allocata dinamicamente dopo che non abbiamo usato la variabile.

Possiamo allocare e quindi deallocare la memoria in modo dinamico utilizzando rispettivamente gli operatori newe delete.

Nuovo operatore C ++

L' newoperatore alloca la memoria a una variabile. Per esempio,

 // declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;

In questo caso, abbiamo allocato dinamicamente la memoria per una intvariabile utilizzando l' newoperatore.

Si noti che abbiamo utilizzato il puntatore pointVar per allocare la memoria in modo dinamico. Questo perché l' newoperatore restituisce l'indirizzo della posizione di memoria.

Nel caso di un array, l' newoperatore restituisce l'indirizzo del primo elemento dell'array.

Dall'esempio sopra, possiamo vedere che la sintassi per l'utilizzo newdell'operatore è

 pointerVariable = new dataType;

Elimina operatore

Una volta che non abbiamo più bisogno di utilizzare una variabile che abbiamo dichiarato dinamicamente, possiamo deallocare la memoria occupata dalla variabile.

Per questo, deleteviene utilizzato l' operatore. Restituisce la memoria al sistema operativo. Questo è noto come deallocazione della memoria .

La sintassi per questo operatore è

 delete pointerVariable;

Considera il codice:

 // declare an int pointer int* pointVar; // dynamically allocate memory // for an int variable pointVar = new int; // assign value to the variable memory *pointVar = 45; // print the value stored in memory cout << *pointVar; // Output: 45 // deallocate the memory delete pointVar;

Qui, abbiamo allocato dinamicamente la memoria per una intvariabile utilizzando il puntatore pointVar.

Dopo aver stampato il contenuto di pointVar, abbiamo deallocato la memoria utilizzando delete.

Nota : se il programma utilizza una grande quantità di memoria indesiderata new, il sistema potrebbe bloccarsi perché non ci sarà memoria disponibile per il sistema operativo. In questo caso, l' deleteoperatore può aiutare il sistema dal crash.

Esempio 1: allocazione dinamica della memoria C ++

 #include using namespace std; int main() ( // declare an int pointer int* pointInt; // declare a float pointer float* pointFloat; // dynamically allocate memory pointInt = new int; pointFloat = new float; // assigning value to the memory *pointInt = 45; *pointFloat = 45.45f; cout << *pointInt << endl; cout << *pointFloat << endl; // deallocate the memory delete pointInt, pointFloat; return 0; )

Produzione

 45 45.45

In questo programma, abbiamo allocato dinamicamente la memoria a due variabili di inte floattipi. Dopo aver assegnato loro dei valori e averli stampati, finalmente si rilasciano le memorie utilizzando il codice

 delete pointInt, pointFloat;

Nota: l'allocazione dinamica della memoria può rendere più efficiente la gestione della memoria.

Soprattutto per gli array, dove molte volte non conosciamo la dimensione dell'array fino al tempo di esecuzione.

Esempio 2: C ++ new and delete Operator for Arrays

 // C++ Program to store GPA of n number of students and display it // where n is the number of students entered by the user #include #include using namespace std; int main() ( int num; cout <> num; float* ptr; // memory allocation of num number of floats ptr = new float(num); cout << "Enter GPA of students." << endl; for (int i = 0; i < num; ++i) ( cout << "Student" << i + 1 <> *(ptr + i); ) cout << "Displaying GPA of students." << endl; for (int i = 0; i < num; ++i) ( cout << "Student" << i + 1 << " :" << *(ptr + i) << endl; ) // ptr memory is released delete () ptr; return 0; )

Produzione

Immettere il numero totale di studenti: 4 Immettere GPA di studenti. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Visualizzazione GPA degli studenti. Studente1: 3,6 Studente2: 3,1 Studente3: 3,9 Studente4: 2,9

In questo programma, abbiamo chiesto all'utente di inserire il numero di studenti e di memorizzarlo nella variabile num.

Quindi, abbiamo allocato dinamicamente la memoria per l' floatarray utilizzando new.

Inseriamo i dati nell'array (e successivamente li stampiamo) usando la notazione del puntatore.

Dopo che non abbiamo più bisogno dell'array, deallochiamo la memoria dell'array usando il codice delete () ptr;.

Notare l'uso di ()after delete. Usiamo le parentesi quadre ()per indicare che la deallocazione della memoria è quella di un array.

Esempio 3: C ++ new e delete Operator for Objects

 #include using namespace std; class Student ( int age; public: // constructor initializes age to 12 Student() : age(12) () void getAge() ( cout << "Age = " << age 

Output

 Age = 12

In this program, we have created a Student class that has a private variable age.

We have initialized age to 12 in the default constructor Student() and print its value with the function getAge().

In main(), we have created a Student object using the new operator and use the pointer ptr to point to its address.

The moment the object is created, the Student() constructor initializes age to 12.

We then call the getAge() function using the code:

 ptr->getAge();

Notice the arrow operator ->. This operator is used to access class members using pointers.

Articoli interessanti...