Diferență între revizuiri ale paginii „C++ POO Operatorii new si delete”

De la WikiLabs
Jump to navigationJump to search
Linia 21: Linia 21:
 
== Operatorul <code>new</code> ==
 
== Operatorul <code>new</code> ==
 
Operatorul <code>new</code> este folosit pentru a rezerva memorie dinamică și, în cazul obiectelor, pentru a construi obiectul în acea zonă de memorie (prin apelarea constructorului).
 
Operatorul <code>new</code> este folosit pentru a rezerva memorie dinamică și, în cazul obiectelor, pentru a construi obiectul în acea zonă de memorie (prin apelarea constructorului).
 +
  
 
Forma generală pentru <code>new</code> este următoarea:
 
Forma generală pentru <code>new</code> este următoarea:
Linia 26: Linia 27:
 
<tip_de_date> <nume_pointer> = new <tip_de_date>;
 
<tip_de_date> <nume_pointer> = new <tip_de_date>;
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
Această linie:
 +
* rezervă memorie pentru o variabilă de tipul specificat;
 +
* returnează adresa acelei zone de memorie;
 +
* memorează adresa într-un pointer de tip corespunzător
 +
  
Sau dacă se dorește și inițializare:
+
Dacă se dorește și inițializare:
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 
<tip_de_date> <nume_pointer> = new <tip_de_date>(<valoare_initiala>);
 
<tip_de_date> <nume_pointer> = new <tip_de_date>(<valoare_initiala>);
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
În plus față de varianta anterioară, această linie inițializează cu <valoare_initiala> valoarea stocată în memoria alocată.
  
 
== Operatorul <code>delete</code> ==
 
== Operatorul <code>delete</code> ==

Versiunea de la data 24 martie 2026 08:27

[WIP Costin] Pagina este in lucru!

Introducere

În programele scrise până acum, majoritatea variabilelor și obiectelor au fost declarate în mod direct, de exemplu:

int x;
Persoana p;

În aceste cazuri, memoria necesară este rezervată automat la intrarea în blocul în care au fost declarate, iar eliberarea ei are loc tot automat la ieșirea din acel bloc. Acest mod de lucru este simplu și sigur, dar nu este întotdeauna suficient.

Există numeroase situații în care un program nu poate ști dinainte de câtă memorie are nevoie. De exemplu:

  • numărul de elemente dintr-un vector este citit de la tastatură;
  • un obiect trebuie să existe și după terminarea funcției în care a fost creat;
  • o clasă trebuie să gestioneze intern resurse a căror dimensiune este variabilă;
  • programul trebuie să creeze obiecte dinamic, doar atunci când este nevoie de ele

În astfel de situații apare nevoia de alocare dinamică a memoriei, adică rezervarea memoriei în timpul execuției programului. În C++, acest lucru se realizează cu ajutorul operatorilor new și delete.

Operatorul new

Operatorul new este folosit pentru a rezerva memorie dinamică și, în cazul obiectelor, pentru a construi obiectul în acea zonă de memorie (prin apelarea constructorului).


Forma generală pentru new este următoarea:

<tip_de_date> <nume_pointer> = new <tip_de_date>;

Această linie:

  • rezervă memorie pentru o variabilă de tipul specificat;
  • returnează adresa acelei zone de memorie;
  • memorează adresa într-un pointer de tip corespunzător


Dacă se dorește și inițializare:

<tip_de_date> <nume_pointer> = new <tip_de_date>(<valoare_initiala>);

În plus față de varianta anterioară, această linie inițializează cu <valoare_initiala> valoarea stocată în memoria alocată.

Operatorul delete

Operatorul delete este folosit pentru a distruge obiectul creat dinamic (prin apelarea destructorului) și pentru a elibera memoria ocupată de acesta.

Forma generală pentru delete este următoarea:

delete <nume_pointer>;
<nume_pointer> = nullptr;

Alocarea dinamică pentru tipuri simple

Lorem ipsum dolor sit amet.

Alocarea dinamică a obiectelor

Lorem ipsum dolor sit amet.

Alocarea dinamică a vectorilor de obiecte

Lorem ipsum dolor sit amet.

Obiecte care conțin memorie alocată dinamic

Lorem ipsum dolor sit amet.

Greșeli frecvente și comportamente periculoase

Lorem ipsum dolor sit amet.