C ++ Muistin hallinta: uusi ja poista

Tässä opetusohjelmassa opimme hallitsemaan muistia tehokkaasti C ++: ssa uusien ja poistettujen toimintojen avulla esimerkkien avulla.

C ++: n avulla voimme allokoida muuttujan tai taulukon muistin ajoaikana. Tätä kutsutaan dynaamiseksi muistin allokoinniksi.

Muilla ohjelmointikielillä, kuten Java ja Python, kääntäjä hallinnoi muuttujille varattuja muisteja automaattisesti. Mutta tämä ei ole asia C ++: ssa.

C ++: ssa meidän on jaettava dynaamisesti varattu muisti manuaalisesti, kun muuttujalle ei ole mitään käyttöä.

Voimme jakaa ja sitten poistaa muistin varaus dynaamisesti käyttämällä newja deleteoperaattoreiden osalta.

C ++ uusi operaattori

newOperaattori jakaa muistin muuttujaan. Esimerkiksi,

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

Tässä olemme osoittaneet dynaamisesti muistia intmuuttujalle newoperaattorin avulla.

Huomaa, että olemme käyttäneet osoitinta pointVar varaamaan muistia dynaamisesti. Tämä johtuu siitä, että newoperaattori palauttaa muistipaikan osoitteen.

Matriisin tapauksessa newoperaattori palauttaa taulukon ensimmäisen elementin osoitteen.

Yllä olevasta esimerkistä voimme nähdä, että newoperaattorin käytön syntaksia on

 pointerVariable = new dataType;

poista operaattori

Kun meidän ei enää tarvitse käyttää dynaamisesti ilmoitettua muuttujaa, voimme jakaa muuttujan käyttämän muistin.

Tätä varten käytetään deleteoperaattoria. Se palauttaa muistin käyttöjärjestelmään. Tätä kutsutaan muistin jakamiseksi .

Tämän operaattorin syntaksi on

 delete pointerVariable;

Harkitse koodia:

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

Tässä olemme osoittaneet dynaamisesti muistia intmuuttujalle osoittimen pointVar avulla.

Kun olet tulostanut pointVar-sisällön, jaoimme muistin käyttämällä delete.

Huomaa : Jos ohjelma käyttää paljon ei-toivottua muistia new, järjestelmä saattaa kaatua, koska käyttöjärjestelmälle ei ole käytettävissä muistia. Tässä tapauksessa deleteoperaattori voi auttaa järjestelmää kaatumisesta.

Esimerkki 1: D + Dynaaminen muistin allokointi

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

Tuotos

 45 45,45

Tässä ohjelmassa allokoimme muistin dynaamisesti kahdelle muuttujalle intja floattyypille. Kun olet määrittänyt heille arvot ja tulostanut ne, jaamme muistit lopulta koodilla

 delete pointInt, pointFloat;

Huomaa: Dynaaminen muistin allokointi voi tehostaa muistin hallintaa.

Erityisesti matriiseille, joissa monta kertaa emme tiedä taulukon kokoa ajoaikaan saakka.

Esimerkki 2: C ++ uusi ja poista operaattori matriiseille

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

Tuotos

Anna opiskelijoiden kokonaismäärä: 4 Anna opiskelijoiden GPA. Opiskelija1: 3.6 Opiskelija2: 3.1 Opiskelija3: 3.9 Opiskelija4: 2.9 Näytetään opiskelijoiden GPA. Opiskelija1: 3.6 Opiskelija2: 3.1 Opiskelija3: 3.9 Opiskelija4: 2.9

Tässä ohjelmassa olemme pyytäneet käyttäjää syöttämään opiskelijoiden määrän ja tallentamaan sen num-muuttujaan.

Sitten olemme allokoineet muistin dynaamisesti floattaulukolle käyttämällä uutta.

Syötämme tietoja taulukkoon (ja tulostamme ne myöhemmin) osoittimen merkinnällä.

Kun emme enää tarvitse taulukkoa, jaamme matriisimuistin koodilla delete () ptr;.

Huomaa ()jälkeen delete. Käytämme hakasulkeita ()osoittamaan, että muistijakauma on matriisin.

Esimerkki 3: C ++ new and delete 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.

Mielenkiintoisia artikkeleita...