C ++ Memory Management: nyt og slet

I denne vejledning lærer vi at styre hukommelsen effektivt i C ++ ved hjælp af nye og slette operationer ved hjælp af eksempler.

C ++ giver os mulighed for at allokere hukommelsen til en variabel eller en matrix i løbetid. Dette er kendt som dynamisk hukommelsestildeling.

I andre programmeringssprog som Java og Python administrerer compileren automatisk de hukommelser, der er allokeret til variabler. Men dette er ikke tilfældet i C ++.

I C ++ skal vi manuelt placere den dynamisk tildelte hukommelse manuelt, efter at vi ikke har brug for variablen.

Vi kan allokere og derefter deallocate hukommelse dynamisk ved hjælp af newog deleteoperatører hhv.

C ++ ny operatør

Den newoperatør allokerer hukommelse 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 hukommelse til en intvariabel ved hjælp af newoperatøren.

Bemærk, at vi har brugt markøren pointVar til at allokere hukommelsen dynamisk. Dette skyldes, at newoperatøren returnerer adressen på hukommelsesplaceringen.

I tilfælde af en matrix newreturnerer operatøren adressen på det første element i arrayet.

Fra eksemplet ovenfor kan vi se, at syntaksen til brug af newoperatøren er

 pointerVariable = new dataType;

slet operatør

Når vi ikke længere har brug for en variabel, som vi har erklæret dynamisk, kan vi omfordele hukommelsen, der er optaget af variablen.

Til dette deletebruges operatøren. Det returnerer hukommelsen til operativsystemet. Dette er kendt som memory deallocation .

Syntaksen for denne operatør er

 delete pointerVariable;

Overvej 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 hukommelse til en intvariabel ved hjælp af pointer pointVar.

Efter udskrivning af indholdet af pointVar omplacerede vi hukommelsen vha delete.

Bemærk : Hvis programmet bruger en stor mængde uønsket hukommelse ved hjælp af new, kan systemet gå ned, fordi der ikke er nogen hukommelse tilgængelig til operativsystemet. I dette tilfælde kan deleteoperatøren hjælpe systemet med at gå ned.

Eksempel 1: C ++ dynamisk hukommelsesallokering

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

Produktion

 45 45,45

I dette program tildelte vi dynamisk hukommelse til to variabler af intog floattyper. Efter at have tildelt værdier til dem og udskrevet dem, placerer vi endelig minderne ved hjælp af koden

 delete pointInt, pointFloat;

Bemærk: Dynamisk hukommelsesallokering kan gøre hukommelsesstyring mere effektiv.

Især til arrays, hvor vi mange gange ikke kender størrelsen på arrayet før løbetiden.

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

Produktion

Indtast det samlede antal studerende: 4 Indtast GPA for studerende. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Viser GPA for studerende. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9

I dette program har vi bedt brugeren om at indtaste antallet af studerende og gemme det i variablen num.

Derefter har vi allokeret hukommelsen dynamisk til floatarrayet ved hjælp af nyt.

Vi indtaster data i arrayet (og udskriver dem senere) ved hjælp af markørnotation.

Når vi ikke længere har brug for arrayet, deallokerer vi array-hukommelsen ved hjælp af koden delete () ptr;.

Bemærk brugen af ()efter delete. Vi bruger de firkantede parenteser ()for at angive, at hukommelsesafdelingen er den for en matrix.

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