Upravljanje pomnilnika C ++: novo in izbriši

V tej vadnici se bomo s pomočjo primerov naučili učinkovitega upravljanja pomnilnika v jeziku C ++ z uporabo novih in brisanje operacij.

C ++ nam omogoča, da v času izvajanja dodelimo pomnilnik spremenljivke ali matrike. To je znano kot dinamično dodeljevanje pomnilnika.

V drugih programskih jezikih, kot sta Java in Python, prevajalnik samodejno upravlja s pomnilniki, dodeljenimi spremenljivkam. Toda v C ++ ni tako.

V C ++ moramo dinamično dodeljeni pomnilnik sprostiti ročno, potem ko spremenljivke ne uporabimo.

S pomočjo operatorjev newin lahko dinamično dodeljevamo in nato sproščamo pomnilnik delete.

C ++ nov operater

newOperater dodeli spomin na spremenljivko. Na primer

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

Tu imamo dinamično dodeljen pomnilnik za intspremenljivko s pomočjo newoperaterja.

Upoštevajte, da smo uporabili kazalec pointVar za dinamično dodeljevanje pomnilnika. To je zato, ker newoperater vrne naslov lokacije v pomnilniku.

V primeru matrike newoperater vrne naslov prvega elementa polja.

Iz zgornjega primera lahko vidimo, da je sintaksa za uporabo newoperaterja

 pointerVariable = new dataType;

izbriši operater

Ko nam ni več treba uporabljati spremenljivke, ki smo jo dinamično razglasili, lahko odstranimo pomnilnik, ki ga zaseda spremenljivka.

Za to deletese uporablja operater. Vrne pomnilnik v operacijski sistem. To je znano kot sprostitev spomina .

Sintaksa tega operaterja je

 delete pointerVariable;

Upoštevajte kodo:

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

Tu imamo dinamično dodeljen pomnilnik za intspremenljivko s pomočjo kazalca pointVar.

Po tiskanju vsebine točkeVar smo s pomočjo razdelili pomnilnik delete.

Opomba : Če program porabi veliko neželenega pomnilnika new, se lahko sistem zruši, ker za operacijski sistem ne bo na voljo pomnilnika. V tem primeru lahko deleteoperater pomaga sistemu pred zrušitvijo.

Primer 1: Dinamično dodeljevanje pomnilnika 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; )

Izhod

 45 45,45

V tem programu smo dinamično dodelili pomnilnik dvema spremenljivkama intin float. Potem ko smo jim dodelili vrednosti in jih natisnili, končno odstranimo spomine s pomočjo kode

 delete pointInt, pointFloat;

Opomba: Dinamično dodeljevanje pomnilnika lahko izboljša upravljanje pomnilnika.

Še posebej za nize, kjer velikokrat ne vemo velikosti polja do časa izvajanja.

Primer 2: C ++ nov in izbriši operator za nize

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

Izhod

Vnesite skupno število študentov: 4 Vnesite GPA študentov. Študent1: 3.6 Študent2: 3.1 Študent3: 3.9 Študent4: 2.9 Prikaz povprečnega uspeha študentov. Študent1: 3,6 Študent2: 3,1 Študent3: 3,9 Študent4: 2,9

V tem programu smo uporabnika pozvali, da vpiše število študentov in ga shrani v spremenljivko num.

Nato smo dinamično dodelili pomnilnik za floatmatriko z uporabo new.

Podatke vnesemo v matriko (in jih kasneje natisnemo) z uporabo kazalnega zapisa.

Ko matrike ne potrebujemo več, s pomočjo kode odstranimo pomnilnik matrike delete () ptr;.

Upoštevajte uporabo ()after delete. V oglatih oklepajih ()označujemo, da je sprostitev pomnilnika enaka matriki.

Primer 3: C ++ nov in izbriši Operator za predmete

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

Zanimive Članki...