I den här handledningen lär vi oss att hantera minne effektivt i C ++ med hjälp av nya och radera operationer med hjälp av exempel.
C ++ tillåter oss att allokera minnet för en variabel eller en array i körtid. Detta kallas dynamisk minnestilldelning.
I andra programmeringsspråk som Java och Python hanterar kompilatorn automatiskt de minnen som tilldelats variabler. Men så är inte fallet i C ++.
I C ++ måste vi hantera det dynamiskt tilldelade minnet manuellt efter att vi inte har någon användning för variabeln.
Vi kan allokera och sedan omplacera minne dynamiskt med new
respektive delete
respektive operatorer.
C ++ ny operatör
Den new
operatör allokerar minne till en variabel. Till exempel,
// declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;
Här har vi dynamiskt tilldelat minne för en int
variabel med new
operatören.
Observera att vi har använt pekaren pointVar för att allokera minnet dynamiskt. Detta beror på att new
operatören returnerar minnesplatsens adress.
I fallet med en array new
returnerar operatören adressen till det första elementet i arrayen.
Från exemplet ovan kan vi se att syntaxen för att använda new
operatören är
pointerVariable = new dataType;
ta bort operatör
När vi inte längre behöver använda en variabel som vi har förklarat dynamiskt, kan vi omplacera minnet som upptas av variabeln.
För detta används delete
operatören. Det returnerar minnet till operativsystemet. Detta kallas minne deallocation .
Syntaxen för den här operatören är
delete pointerVariable;
Tänk 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;
Här har vi dynamiskt tilldelat minne för en int
variabel med hjälp av pekaren pointVar.
Efter att ha skrivit ut innehållet i pointVar omplacerade vi minnet med hjälp av delete
.
Obs! Om programmet använder en stor mängd oönskat minne med new
kan systemet krascha eftersom det inte finns något minne tillgängligt för operativsystemet. I detta fall kan delete
operatören hjälpa systemet från att krascha.
Exempel 1: C ++ dynamisk minnesallokering
#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; )
Produktion
45 45,45
I det här programmet tilldelade vi dynamiskt minne till två variabler av int
och float
typer. Efter att ha tilldelat värden till dem och skrivit ut dem, placerar vi äntligen minnena med koden
delete pointInt, pointFloat;
Obs! Dynamisk minnestilldelning kan göra minneshantering mer effektiv.
Speciellt för matriser, där många gånger vi inte känner till storleken på matrisen förrän körtiden.
Exempel 2: C ++ ny och ta bort 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; )
Produktion
Ange totalt antal studenter: 4 Ange GPA för studenter. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Visar GPA för studenter. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9
I det här programmet har vi bett användaren att ange antalet studenter och lagra det i variabeln num.
Sedan har vi tilldelat minnet dynamiskt för float
matrisen med nytt.
Vi matar in data i matrisen (och skriver ut dem senare) med hjälp av pekarenotation.
När vi inte längre behöver arrayen, omplacerar vi arrayminnet med koden delete () ptr;
.
Lägg märke till användningen av ()
efter delete
. Vi använder hakparenteserna ()
för att beteckna att minnesavtalet är det för en matris.
Exempel 3: C ++ ny och ta bort operatör för objekt
#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.