Selles õpetuses õpime C ++ -s tõhusalt mälu haldama, kasutades näiteid kasutades uusi ja kustutavaid toiminguid.
C ++ võimaldab meil eraldada muutuja või massiivi mälu tööajal. Seda nimetatakse dünaamiliseks mälu eraldamiseks.
Teistes programmeerimiskeeltes, nagu Java ja Python, haldab kompilaator muutujatele eraldatud mälusid automaatselt. Kuid see ei kehti C ++ puhul.
C ++ puhul peame dünaamiliselt eraldatud mälu käsitsi lahendama, kui meil pole muutujat kasutada.
Me ei saa eraldada ja siis deallocate mälu abil dünaamiliselt new
ja delete
ettevõtjate kaupa.
C ++ uus operaator
new
Operaator eraldab mälu muutuja. Näiteks,
// declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;
Siin oleme operaatori int
abil muutuja jaoks dünaamiliselt mälu eraldanud new
.
Pange tähele, et me kasutasime mälu dünaamiliseks jaotamiseks pointer pointVar. Seda seetõttu, et new
operaator tagastab mälu asukoha aadressi.
Massiivi korral new
tagastab operaator massiivi esimese elemendi aadressi.
Ülaltoodud näite põhjal näeme, et new
operaatori kasutamise süntaks on
pointerVariable = new dataType;
Kustuta Operaator
Kui me ei pea enam dünaamiliselt deklareeritud muutujat kasutama, saame muutujaga hõivatud mälu jaotada.
Selleks kasutatakse delete
operaatorit. See tagastab operatsioonisüsteemi mälu. Seda tuntakse kui mälu jagamist .
Selle operaatori süntaks on
delete pointerVariable;
Mõelge koodile:
// 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;
Siin oleme int
muutuja jaoks dünaamiliselt eraldanud mälu, kasutades pointer pointVar.
Pärast pointVari sisu printimist jagasime mälu kasutades delete
.
Märkus . Kui programm kasutab suures koguses soovimatut mälu new
, võib süsteem kokku kukkuda, kuna opsüsteemi jaoks pole vaba mälu. Sellisel juhul saab delete
operaator aidata süsteemi krahhi.
Näide 1: C ++ dünaamilise mälu jaotamine
#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; )
Väljund
45 45.45
Selles programmis eraldasime dünaamiliselt mälu kahele muutujale int
ja float
tüübile. Pärast neile väärtuste määramist ja nende printimist jagame mälud lõpuks koodi abil
delete pointInt, pointFloat;
Märkus. Dünaamiline mälu eraldamine võib muuta mäluhalduse tõhusamaks.
Eriti massiivide puhul, kus me ei tea paljudel juhtudel massiivi suurust enne tööaega.
Näide 2: C ++ uus ja kustutage massiivide operaator
// 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; )
Väljund
Sisestage õpilaste koguarv: 4 Sisestage õpilaste GPA. Õpilane1: 3,6 Õpilane2: 3,1 Õpilane3: 3,9 Õpilane4: 2,9 Üliõpilaste GPA kuvamine. Õpilane1: 3,6 Õpilane2: 3,1 Õpilane3: 3,9 Õpilane4: 2,9
Selles programmis oleme palunud kasutajal sisestada õpilaste arv ja salvestada see muutujasse num.
Seejärel eraldasime float
massiivi jaoks dünaamiliselt mälu, kasutades uut.
Andmed sisestame massiivi (ja hiljem printime), kasutades kursori märke.
Pärast seda, kui massiivi pole enam vaja, jaotame massiivi mälu koodi abil delete () ptr;
.
Pange tähele ()
pärast delete
. Kasutame nurksulgudes ()
tähistamaks, et mälu jagamine on massiivi oma.
Näide 3: C ++ uus ja kustutage objektide operaator
#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.