Lucrul cu memorie folosind noi și șterge, de programare în C și c

După cum se știe, în C-fe malloc ktsii () și libere () sunt utilizate pentru alocarea dinamică și deallocation. Cu toate acestea, C ++ conține doi operatori care efectuează alocarea și Dealocarea memoriei mai eficient și mai simplu. Acești operatori sunt noi și șterge. Forma lor generală este:

peremennaya_ukazatel = new VarType;

Dacă funcționarea alocare de memorie nu poate fi realizată, operatorul generează un nou tip de IP Turning xalloc. În cazul în care programul nu intercepteze această excepție, atunci acesta va fi taxat pentru a efectua. Deși programele scurte este comportamentul implicit este satisfăcătoare-ing, pentru aplicații reale au nevoie, de obicei, pentru a prinde excepție și manipulare bot în consecință. Pentru a ține evidența acestei excepții, trebuie să inclusiv fișierul header-except.h pici.

Există mai multe avantaje de a folosi noi la utilizarea malloc (). În primul rând, noul operator calculează automat memoria necesară. Nu este nevoie de a utiliza sizeof (). Mai important, previne eliberarea accidentală a unei cantități incorecte de memorie. În al doilea rând, noul operator revine automat un pointer la tipul dorit, astfel încât nu este nevoie de a utiliza un operator de tip de conversie. În al treilea rând, ca RMS-ro va fi descrisă, este posibil să inițializa obiectul folosind operatorul nou. În cele din urmă, este posibil să se suprasarcină operatorului nou și operatorul delete la nivel global sau în ceea ce privește clasa care este creat.

Aici este un exemplu simplu de utilizare a new si delete. Ar trebui să plătească atten-Manie pentru a utiliza încerca / captură bloc pentru a urmări erorile de alocare de memorie.

#include
#include
int main ()
int * p;
încercați p = new int; // alocare de memorie pentru int
> Captura (xalloc xa) cout <<"Allocation failure.\n";
întoarce 1;
>
* P = 20; // valori asignarea date de memorie Locul de amplasare 20
cout <<*р; // демонстрация работы путем вывода значения
șterge p; // memorie liberă
return 0;
>

Așa cum sa menționat, este posibil pentru a inițializa memoria cu ajutorul noului operator. Pentru a face acest lucru, specificați valoarea de inițializare în paranteze după numele tipului. De exemplu, în exemplul următor, memoria căreia indicatorul p, este inițializat la 99:

#include
#include
int main ()
int * p;
încerca p = new int (99); // initializeaza 99-lea
> Captura (xalloc xa) cout <<"Allocation failure.\n";
întoarce 1;
>
cout <<*p;
șterge p;
return 0;
>

Cu noi matrice pot fi plasate. Forma generală a unei matrice unidimensională are forma:

peremennaya_ukazatel VarType = new [size];

Aici, dimensiunea specifică numărul de elemente din matrice. Pentru a aminti o limitare importantă atunci când plasarea șirului: nu poate fi inițializat.

Pentru a elibera alocarea dinamică a matrice trebuie să utilizeze formularul de mai jos declarație de ștergere:

Aici, parantezele [] informează operatorul șterge, trebuie să eliberați memoria alocată pentru matrice.

Programul următor se alocă memorie pentru o matrice de 10 elemente de tip float. Elementele de matrice sunt atribuite valorile 100-109, iar apoi matrice este afișată pe ecran:

#include
#include
int main ()
float * p;
int i;
încerca p = new float [10]; // obține elementul de matrice al zecelea
> Captura (xalloc xa) cout <<"Allocation failure.\n";
întoarce 1;
>
// atribuirea valorilor 100-109
pentru (i = 0; i<10; i + + ) p[i] = 100.00 + i;
// imprima conținutul unei matrice
pentru (i = 0; i<10; i++) cout < șterge [] p; // sterge intreaga matrice
return 0;
>

articole similare