Managementul memoriei C ++: nou și șters

În acest tutorial, vom învăța să gestionăm memoria în mod eficient în C ++ folosind operații noi și ștergere cu ajutorul exemplelor.

C ++ ne permite să alocăm memoria unei variabile sau a unei matrice în timp de execuție. Aceasta este cunoscută sub numele de alocare dinamică a memoriei.

În alte limbaje de programare, cum ar fi Java și Python, compilatorul gestionează automat memoriile alocate variabilelor. Dar acest lucru nu este cazul în C ++.

În C ++, trebuie să alocăm manual memoria alocată dinamic, după ce nu avem nicio utilizare pentru variabilă.

Putem aloca memorie și apoi deallocate dinamic folosind newși deleteoperatori , respectiv.

C ++ nou operator

newOperatorul alocă memorie pentru o variabilă. De exemplu,

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

Aici, am alocat dinamic memorie pentru o intvariabilă folosind newoperatorul.

Observați că am folosit pointer pointVar pentru a aloca memoria dinamic. Acest lucru se datorează faptului că newoperatorul returnează adresa locației de memorie.

În cazul unui tablou, newoperatorul returnează adresa primului element al tabloului.

Din exemplul de mai sus, putem vedea că sintaxa pentru utilizarea newoperatorului este

 pointerVariable = new dataType;

șterge Operator

Odată ce nu mai trebuie să folosim o variabilă pe care am declarat-o dinamic, putem să alocăm memoria ocupată de variabilă.

Pentru aceasta deletese folosește operatorul. Acesta returnează memoria sistemului de operare. Aceasta este cunoscută sub denumirea de repartizare a memoriei .

Sintaxa pentru acest operator este

 delete pointerVariable;

Luați în considerare codul:

 // 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;

Aici, am alocat dinamic memorie pentru o intvariabilă folosind pointer pointVar.

După tipărirea conținutului pointVar, am repartizat memoria folosind delete.

Notă : Dacă programul folosește o cantitate mare de memorie nedorită new, sistemul se poate bloca deoarece nu va exista memorie disponibilă pentru sistemul de operare. În acest caz, deleteoperatorul poate ajuta sistemul să se blocheze.

Exemplul 1: C ++ Dynamic Memory Allocation

 #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; )

Ieșire

 45 45,45

În acest program, am alocat dinamic memorie la două variabile intși floattipuri. După ce le-am atribuit valori și le-am tipărit, în cele din urmă alocăm amintirile folosind codul

 delete pointInt, pointFloat;

Notă: Alocarea dinamică a memoriei poate face gestionarea memoriei mai eficientă.

Mai ales pentru matrici, în care de multe ori nu cunoaștem dimensiunea matricei până la timpul de execuție.

Exemplul 2: C ++ nou și ștergeți Operator pentru matrice

 // 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; )

Ieșire

Introduceți numărul total de studenți: 4 Introduceți GPA de studenți. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Afișarea GPA a studenților. Student1: 3,6 Student2: 3,1 Student3: 3,9 Student4: 2,9

În acest program, am cerut utilizatorului să introducă numărul de studenți și să-l stocheze în variabila num.

Apoi, am alocat memoria dinamic pentru floatmatrice folosind new.

Introducem date în matrice (și ulterior le imprimăm) folosind notația pointer.

După ce nu mai avem nevoie de matrice, alocăm memoria matricei folosind codul delete () ptr;.

Observați utilizarea ()after delete. Folosim parantezele pătrate ()pentru a indica faptul că repartizarea memoriei este cea a unui tablou.

Exemplul 3: C ++ nou și șterge Operator pentru obiecte

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

Articole interesante...