I denne opplæringen vil vi lære å administrere minne effektivt i C ++ ved å bruke nye og slette operasjoner ved hjelp av eksempler.
C ++ lar oss fordele minnet til en variabel eller en matrise i kjøretid. Dette er kjent som dynamisk minnetildeling.
I andre programmeringsspråk som Java og Python, administrerer kompilatoren automatisk minnene som er tildelt variabler. Men dette er ikke tilfelle i C ++.
I C ++ trenger vi å fordele det dynamisk tildelte minnet manuelt etter at vi ikke har brukt variabelen.
Vi kan tildele og allokere minne dynamisk bruker new
og delete
operatører hhv.
C ++ ny operatør
Den new
operatør tildeler minne til en variabel. For eksempel,
// declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;
Her har vi dynamisk tildelt minne for en int
variabel ved hjelp av new
operatøren.
Legg merke til at vi har brukt peker pointVar til å fordele minnet dynamisk. Dette er fordi new
operatøren returnerer adressen til minneplasseringen.
I tilfelle en matrise new
returnerer operatøren adressen til det første elementet i matrisen.
Fra eksemplet ovenfor kan vi se at syntaksen for bruk av new
operatøren er
pointerVariable = new dataType;
slett operatør
Når vi ikke lenger trenger å bruke en variabel som vi har erklært dynamisk, kan vi plassere minnet som er opptatt av variabelen.
For dette brukes delete
operatøren. Den returnerer minnet til operativsystemet. Dette er kjent som minneoverføring .
Syntaksen for denne operatøren er
delete pointerVariable;
Tenk 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;
Her har vi dynamisk tildelt minne for en int
variabel ved hjelp av pekeren pointVar.
Etter å ha skrevet ut innholdet i pointVar, fordelte vi minnet ved hjelp av delete
.
Merk : Hvis programmet bruker mye uønsket minne ved hjelp av new
, kan systemet krasje fordi det ikke vil være noe tilgjengelig minne for operativsystemet. I dette tilfellet kan delete
operatøren hjelpe systemet med å krasje.
Eksempel 1: C ++ dynamisk minnetildeling
#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; )
Produksjon
45 45,45
I dette programmet tildelte vi dynamisk minne til to variabler av int
og float
typer. Etter å ha tildelt verdier til dem og skrevet ut dem, omfordeler vi endelig minnene ved hjelp av koden
delete pointInt, pointFloat;
Merk: Dynamisk minnetildeling kan gjøre minneadministrasjon mer effektiv.
Spesielt for matriser, hvor mange ganger vi ikke vet størrelsen på matrisen før kjøretiden.
Eksempel 2: C ++ ny og slett 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; )
Produksjon
Angi totalt antall studenter: 4 Angi GPA for studenter. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Viser GPA for studenter. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9
I dette programmet har vi bedt brukeren om å oppgi antall studenter og lagre det i num-variabelen.
Deretter har vi tildelt minnet dynamisk for float
matrisen ved hjelp av nytt.
Vi legger inn data i matrisen (og senere skriver dem ut) ved hjelp av pekermarkering.
Etter at vi ikke lenger trenger matrisen, distribuerer vi matematikkminnet ved hjelp av koden delete () ptr;
.
Legg merke til bruken av ()
etter delete
. Vi bruker firkantede parenteser ()
for å indikere at minnedeallokasjonen er den for en matrise.
Eksempel 3: C ++ ny og slett 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.