C ++ Upravljanje memorijom: novo i brisanje

U ovom uputstvu naučit ćemo učinkovito upravljanje memorijom u C ++-u pomoću novih i brisanja operacija uz pomoć primjera.

C ++ nam omogućuje da dodijelimo memoriju varijable ili niza u vremenu izvođenja. To je poznato kao dinamička dodjela memorije.

U drugim programskim jezicima kao što su Java i Python, kompajler automatski upravlja memorijama dodijeljenim varijablama. Ali to nije slučaj u C ++-u.

U C ++-u moramo ručno osloboditi dinamički dodijeljenu memoriju nakon što ne koristimo varijablu.

Možemo izdvojiti i onda drukčije pridijeliti memorije dinamički newi deleteoperatera odnosno.

C ++ novi operator

newOperator izdvaja memorije varijable. Na primjer,

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

Ovdje smo dinamički dodijelili memoriju za intvarijablu pomoću newoperatora.

Primijetite da smo koristili pokazivač pointVar za dinamičku alokaciju memorije. To je zato što newoperator vraća adresu memorijskog mjesta.

U slučaju niza, newoperator vraća adresu prvog elementa niza.

Iz gornjeg primjera možemo vidjeti da je sintaksa korištenja newoperatora

 pointerVariable = new dataType;

izbriši Operator

Kad više ne trebamo koristiti varijablu koju smo dinamički deklarirali, možemo osloboditi memoriju koju zauzima varijabla.

Za to deletese koristi operator. Vraća memoriju u operativni sustav. Ovo je poznato kao oslobađanje memorije .

Sintaksa ovog operatora je

 delete pointerVariable;

Razmotrite kod:

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

Ovdje smo dinamički dodijelili memoriju za intvarijablu pomoću pokazivača pointVar.

Nakon ispisa sadržaja pointVar-a, oslobodili smo memoriju pomoću delete.

Napomena : Ako program koristi veliku količinu neželjene memorije new, sustav se može srušiti jer za operativni sustav neće biti dostupne memorije. U tom slučaju deleteoperater može pomoći sustavu da ne padne.

Primjer 1: Dinamička dodjela memorije 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; )

Izlaz

 45 45,45

U ovom smo programu dinamički dodijelili memoriju dvjema varijablama inti floatvrstama. Nakon što smo im dodijelili vrijednosti i ispisali ih, konačno oslobađamo uspomene pomoću koda

 delete pointInt, pointFloat;

Napomena: Dinamičko dodjeljivanje memorije može upravljanje memorijom učiniti učinkovitijim.

Pogotovo za nizove, gdje puno puta ne znamo veličinu niza do vremena izvođenja.

Primjer 2: C ++ novi i brisanje operatora za nizove

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

Izlaz

Unesite ukupan broj učenika: 4 Unesite GPA učenika. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Prikazivanje prosjeka ocjena učenika. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9

U ovom smo programu tražili od korisnika da unese broj učenika i pohrani ga u varijablu num.

Zatim smo dinamički dodijelili memoriju za floatniz koristeći new.

Podaci unosimo u polje (i kasnije ih ispisujemo) pomoću oznake pokazivača.

Nakon što više ne trebamo polje, oslobađamo memoriju niza pomoću koda delete () ptr;.

Primijetite upotrebu ()after delete. Koristimo uglate zagrade ()kako bismo označili da je oslobađanje memorije niza.

Primjer 3: C ++ novi i izbriši Operator za objekte

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

Zanimljivi članci...