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ä new
ja delete
operaattoreiden osalta.
C ++ uusi operaattori
new
Operaattori 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 int
muuttujalle new
operaattorin avulla.
Huomaa, että olemme käyttäneet osoitinta pointVar varaamaan muistia dynaamisesti. Tämä johtuu siitä, että new
operaattori palauttaa muistipaikan osoitteen.
Matriisin tapauksessa new
operaattori palauttaa taulukon ensimmäisen elementin osoitteen.
Yllä olevasta esimerkistä voimme nähdä, että new
operaattorin 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 delete
operaattoria. 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 int
muuttujalle 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 delete
operaattori 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 int
ja float
tyypille. 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 float
taulukolle 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.