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 new
in lahko dinamično dodeljevamo in nato sproščamo pomnilnik delete
.
C ++ nov operater
new
Operater 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 int
spremenljivko s pomočjo new
operaterja.
Upoštevajte, da smo uporabili kazalec pointVar za dinamično dodeljevanje pomnilnika. To je zato, ker new
operater vrne naslov lokacije v pomnilniku.
V primeru matrike new
operater vrne naslov prvega elementa polja.
Iz zgornjega primera lahko vidimo, da je sintaksa za uporabo new
operaterja
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 delete
se 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 int
spremenljivko 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 delete
operater 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 int
in 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 float
matriko 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.