C ++ Memory Management: ny og slett

I denne opplæringen vil vi lære å administrere minne effektivt i C ++ ved å bruke nye og slette operasjoner ved hjelp av eksempler.

C ++ lar oss fordele minnet til en variabel eller en matrise i kjøretid. Dette er kjent som dynamisk minnetildeling.

I andre programmeringsspråk som Java og Python, administrerer kompilatoren automatisk minnene som er tildelt variabler. Men dette er ikke tilfelle i C ++.

I C ++ trenger vi å fordele det dynamisk tildelte minnet manuelt etter at vi ikke har brukt variabelen.

Vi kan tildele og allokere minne dynamisk bruker newog deleteoperatører hhv.

C ++ ny operatør

Den newoperatør tildeler minne til en variabel. For eksempel,

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

Her har vi dynamisk tildelt minne for en intvariabel ved hjelp av newoperatøren.

Legg merke til at vi har brukt peker pointVar til å fordele minnet dynamisk. Dette er fordi newoperatøren returnerer adressen til minneplasseringen.

I tilfelle en matrise newreturnerer operatøren adressen til det første elementet i matrisen.

Fra eksemplet ovenfor kan vi se at syntaksen for bruk av newoperatøren er

 pointerVariable = new dataType;

slett operatør

Når vi ikke lenger trenger å bruke en variabel som vi har erklært dynamisk, kan vi plassere minnet som er opptatt av variabelen.

For dette brukes deleteoperatøren. Den returnerer minnet til operativsystemet. Dette er kjent som minneoverføring .

Syntaksen for denne operatøren er

 delete pointerVariable;

Tenk på koden:

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

Her har vi dynamisk tildelt minne for en intvariabel ved hjelp av pekeren pointVar.

Etter å ha skrevet ut innholdet i pointVar, fordelte vi minnet ved hjelp av delete.

Merk : Hvis programmet bruker mye uønsket minne ved hjelp av new, kan systemet krasje fordi det ikke vil være noe tilgjengelig minne for operativsystemet. I dette tilfellet kan deleteoperatøren hjelpe systemet med å krasje.

Eksempel 1: C ++ dynamisk minnetildeling

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

Produksjon

 45 45,45

I dette programmet tildelte vi dynamisk minne til to variabler av intog floattyper. Etter å ha tildelt verdier til dem og skrevet ut dem, omfordeler vi endelig minnene ved hjelp av koden

 delete pointInt, pointFloat;

Merk: Dynamisk minnetildeling kan gjøre minneadministrasjon mer effektiv.

Spesielt for matriser, hvor mange ganger vi ikke vet størrelsen på matrisen før kjøretiden.

Eksempel 2: C ++ ny og slett 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; )

Produksjon

Angi totalt antall studenter: 4 Angi GPA for studenter. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Viser GPA for studenter. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9

I dette programmet har vi bedt brukeren om å oppgi antall studenter og lagre det i num-variabelen.

Deretter har vi tildelt minnet dynamisk for floatmatrisen ved hjelp av nytt.

Vi legger inn data i matrisen (og senere skriver dem ut) ved hjelp av pekermarkering.

Etter at vi ikke lenger trenger matrisen, distribuerer vi matematikkminnet ved hjelp av koden delete () ptr;.

Legg merke til bruken av ()etter delete. Vi bruker firkantede parenteser ()for å indikere at minnedeallokasjonen er den for en matrise.

Eksempel 3: C ++ ny og slett 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.

Interessante artikler...