C ++ Memory Management: nytt och ta bort

I den här handledningen lär vi oss att hantera minne effektivt i C ++ med hjälp av nya och radera operationer med hjälp av exempel.

C ++ tillåter oss att allokera minnet för en variabel eller en array i körtid. Detta kallas dynamisk minnestilldelning.

I andra programmeringsspråk som Java och Python hanterar kompilatorn automatiskt de minnen som tilldelats variabler. Men så är inte fallet i C ++.

I C ++ måste vi hantera det dynamiskt tilldelade minnet manuellt efter att vi inte har någon användning för variabeln.

Vi kan allokera och sedan omplacera minne dynamiskt med newrespektive deleterespektive operatorer.

C ++ ny operatör

Den newoperatör allokerar minne till en variabel. Till exempel,

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

Här har vi dynamiskt tilldelat minne för en intvariabel med newoperatören.

Observera att vi har använt pekaren pointVar för att allokera minnet dynamiskt. Detta beror på att newoperatören returnerar minnesplatsens adress.

I fallet med en array newreturnerar operatören adressen till det första elementet i arrayen.

Från exemplet ovan kan vi se att syntaxen för att använda newoperatören är

 pointerVariable = new dataType;

ta bort operatör

När vi inte längre behöver använda en variabel som vi har förklarat dynamiskt, kan vi omplacera minnet som upptas av variabeln.

För detta används deleteoperatören. Det returnerar minnet till operativsystemet. Detta kallas minne deallocation .

Syntaxen för den här operatören är

 delete pointerVariable;

Tänk 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;

Här har vi dynamiskt tilldelat minne för en intvariabel med hjälp av pekaren pointVar.

Efter att ha skrivit ut innehållet i pointVar omplacerade vi minnet med hjälp av delete.

Obs! Om programmet använder en stor mängd oönskat minne med newkan systemet krascha eftersom det inte finns något minne tillgängligt för operativsystemet. I detta fall kan deleteoperatören hjälpa systemet från att krascha.

Exempel 1: C ++ dynamisk minnesallokering

 #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 det här programmet tilldelade vi dynamiskt minne till två variabler av intoch floattyper. Efter att ha tilldelat värden till dem och skrivit ut dem, placerar vi äntligen minnena med koden

 delete pointInt, pointFloat;

Obs! Dynamisk minnestilldelning kan göra minneshantering mer effektiv.

Speciellt för matriser, där många gånger vi inte känner till storleken på matrisen förrän körtiden.

Exempel 2: C ++ ny och ta bort 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

Ange totalt antal studenter: 4 Ange GPA för studenter. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Visar GPA för studenter. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9

I det här programmet har vi bett användaren att ange antalet studenter och lagra det i variabeln num.

Sedan har vi tilldelat minnet dynamiskt för floatmatrisen med nytt.

Vi matar in data i matrisen (och skriver ut dem senare) med hjälp av pekarenotation.

När vi inte längre behöver arrayen, omplacerar vi arrayminnet med koden delete () ptr;.

Lägg märke till användningen av ()efter delete. Vi använder hakparenteserna ()för att beteckna att minnesavtalet är det för en matris.

Exempel 3: C ++ ny och ta bort operatör för objekt

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

Intressanta artiklar...