U ovom uputstvu naučit ćemo učinkovito upravljanje memorijom u C ++-u pomoću novih i brisanja operacija uz pomoć primjera.
C ++ nam omogućuje da dodijelimo memoriju varijable ili niza u vremenu izvođenja. To je poznato kao dinamička dodjela memorije.
U drugim programskim jezicima kao što su Java i Python, kompajler automatski upravlja memorijama dodijeljenim varijablama. Ali to nije slučaj u C ++-u.
U C ++-u moramo ručno osloboditi dinamički dodijeljenu memoriju nakon što ne koristimo varijablu.
Možemo izdvojiti i onda drukčije pridijeliti memorije dinamički new
i delete
operatera odnosno.
C ++ novi operator
new
Operator izdvaja memorije varijable. Na primjer,
// declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;
Ovdje smo dinamički dodijelili memoriju za int
varijablu pomoću new
operatora.
Primijetite da smo koristili pokazivač pointVar za dinamičku alokaciju memorije. To je zato što new
operator vraća adresu memorijskog mjesta.
U slučaju niza, new
operator vraća adresu prvog elementa niza.
Iz gornjeg primjera možemo vidjeti da je sintaksa korištenja new
operatora
pointerVariable = new dataType;
izbriši Operator
Kad više ne trebamo koristiti varijablu koju smo dinamički deklarirali, možemo osloboditi memoriju koju zauzima varijabla.
Za to delete
se koristi operator. Vraća memoriju u operativni sustav. Ovo je poznato kao oslobađanje memorije .
Sintaksa ovog operatora je
delete pointerVariable;
Razmotrite kod:
// 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;
Ovdje smo dinamički dodijelili memoriju za int
varijablu pomoću pokazivača pointVar.
Nakon ispisa sadržaja pointVar-a, oslobodili smo memoriju pomoću delete
.
Napomena : Ako program koristi veliku količinu neželjene memorije new
, sustav se može srušiti jer za operativni sustav neće biti dostupne memorije. U tom slučaju delete
operater može pomoći sustavu da ne padne.
Primjer 1: Dinamička dodjela memorije C ++
#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; )
Izlaz
45 45,45
U ovom smo programu dinamički dodijelili memoriju dvjema varijablama int
i float
vrstama. Nakon što smo im dodijelili vrijednosti i ispisali ih, konačno oslobađamo uspomene pomoću koda
delete pointInt, pointFloat;
Napomena: Dinamičko dodjeljivanje memorije može upravljanje memorijom učiniti učinkovitijim.
Pogotovo za nizove, gdje puno puta ne znamo veličinu niza do vremena izvođenja.
Primjer 2: C ++ novi i brisanje operatora za nizove
// 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; )
Izlaz
Unesite ukupan broj učenika: 4 Unesite GPA učenika. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Prikazivanje prosjeka ocjena učenika. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9
U ovom smo programu tražili od korisnika da unese broj učenika i pohrani ga u varijablu num.
Zatim smo dinamički dodijelili memoriju za float
niz koristeći new.
Podaci unosimo u polje (i kasnije ih ispisujemo) pomoću oznake pokazivača.
Nakon što više ne trebamo polje, oslobađamo memoriju niza pomoću koda delete () ptr;
.
Primijetite upotrebu ()
after delete
. Koristimo uglate zagrade ()
kako bismo označili da je oslobađanje memorije niza.
Primjer 3: C ++ novi i izbriši Operator za objekte
#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.