C ++ Memory Management: nieuw en verwijderen

In deze tutorial zullen we leren om geheugen effectief te beheren in C ++ met behulp van nieuwe en verwijderingsbewerkingen met behulp van voorbeelden.

Met C ++ kunnen we het geheugen van een variabele of array in runtime toewijzen. Dit staat bekend als dynamische geheugentoewijzing.

In andere programmeertalen, zoals Java en Python, beheert de compiler automatisch de geheugens die aan variabelen zijn toegewezen. Maar dit is niet het geval in C ++.

In C ++ moeten we het dynamisch toegewezen geheugen handmatig opnieuw toewijzen nadat we de variabele niet hebben gebruikt.

We kunnen toewijzen en vervolgens deallocate geheugen dynamisch met behulp van de newen deleteoperators respectievelijk.

C ++ nieuwe operator

De newoperator wijst geheugen toe aan een variabele. Bijvoorbeeld,

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

Hier hebben we dynamisch geheugen toegewezen voor een intvariabele met behulp van de newoperator.

Merk op dat we de pointer pointVar hebben gebruikt om het geheugen dynamisch toe te wijzen. Dit komt doordat de newoperator het adres van de geheugenlocatie retourneert.

In het geval van een array geeft de newoperator het adres van het eerste element van de array terug.

Uit het bovenstaande voorbeeld kunnen we zien dat de syntaxis voor het gebruik van de newoperator is

 pointerVariable = new dataType;

verwijder Operator

Zodra we niet langer een variabele hoeven te gebruiken die we dynamisch hebben gedeclareerd, kunnen we het geheugen dat door de variabele wordt ingenomen ongedaan maken.

Hiervoor wordt de deleteoperator gebruikt. Het retourneert het geheugen naar het besturingssysteem. Dit staat bekend als geheugentoewijzing .

De syntaxis voor deze operator is

 delete pointerVariable;

Beschouw de code:

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

Hier hebben we dynamisch geheugen toegewezen voor een intvariabele met behulp van de pointer pointVar.

Nadat we de inhoud van pointVar hebben afgedrukt, hebben we de toewijzing van het geheugen opgeheven met delete.

Opmerking : als het programma een grote hoeveelheid ongewenst geheugen gebruikt new, kan het systeem crashen omdat er geen geheugen beschikbaar is voor het besturingssysteem. In dit geval kan de deleteoperator het systeem helpen crashen.

Voorbeeld 1: C ++ dynamische geheugentoewijzing

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

Uitvoer

 45 45.45

In dit programma hebben we dynamisch geheugen toegewezen aan twee variabelen van inten floattypen. Nadat we er waarden aan hebben toegewezen en ze hebben afgedrukt, maken we eindelijk de toewijzing van de geheugens ongedaan met behulp van de code

 delete pointInt, pointFloat;

Opmerking: Dynamische geheugentoewijzing kan geheugenbeheer efficiënter maken.

Vooral voor arrays, waar we vaak de grootte van de array pas na de runtime weten.

Voorbeeld 2: C ++ new en delete Operator voor 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; )

Uitvoer

Voer het totale aantal studenten in: 4 Voer het GPA van studenten in. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 GPA van studenten weergeven. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9

In dit programma hebben we de gebruiker gevraagd het aantal studenten in te voeren en op te slaan in de variabele num.

Vervolgens hebben we het geheugen dynamisch toegewezen aan de floatarray met behulp van new.

We voeren gegevens in de array in (en drukken ze later af) met behulp van pointer-notatie.

Nadat we de array niet langer nodig hebben, maken we de toewijzing van het array-geheugen ongedaan met behulp van de code delete () ptr;.

Let op het gebruik van ()after delete. We gebruiken de vierkante haken ()om aan te geven dat de geheugentoewijzing die van een array is.

Voorbeeld 3: C ++ nieuwe en verwijderoperator voor objecten

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