Korištenje auto_ptr klase

Teme vezane za console/GUI programiranje u C/C++ jeziku
1 post • Stranica: 1/1.

Korištenje auto_ptr klase

PostPostao/la Armin » 02 ožu 2012, 12:47

Kao prvo prisjetimo se dinamičke alokacije i problema koji pri tome nastaju. Primjer:

cpp code
int* x = new int[20];


U ovom primjeru smo dinamički alocirali niz cijelih brojeva. Problem nastaje ukoliko ne uradimo delete[] x. Pri završetku izvršavanja programa pointer x će se obrisati iz memorije dok će ono što je taj pointer dinamički alocirao ostati u memoriji i pri tome nastaje memory leak.

Uvodimo pojam auto_ptr klase, koja je sadržana unutar zaglavlja memory.

Primjer:

cpp code
#include <iostream>
#include <memory>
using namespace std;

int main()
{
auto_ptr<int> x (new int[20]);

return 0;
}


Primjetite da smo koristili new a nigdje nismo koristili delete []. auto_ptr je generička klasa koja prilikom destrukcije uništava sve elemente koji su dinamički alocirani. Još jedna odlika auto_ptr klase je to što je bazirana na principu vlasništva. To znači da elementi koji su dinamički alocirani koristeći auto_ptr klasu su u vlasništvu te klase, i nemaju veze s drugim elementima auto_ptr klase. Primjer:

cpp code
#include <iostream>
#include <memory>
using namespace std;

int main()
{
auto_ptr<int> element1 (new int(2));
auto_ptr<int> element2;
cout<<"Nakon deklaracije:"<<endl;
if(element1.get()!=NULL)cout<<"element1: "<<*element1<<endl; else cout<<"element1: "<<NULL<<endl;
if(element2.get()!=NULL)cout<<"element2: "<<*element2<<endl; else cout<<"element2: "<<NULL<<endl;
element2=element1;
cout<<"Nakon kopiranja:"<<endl;
if(element1.get()!=NULL)cout<<"element1: "<<*element1<<endl; else cout<<"element1: "<<NULL<<endl;
if(element2.get()!=NULL)cout<<"element2: "<<*element2<<endl; else cout<<"element2: "<<NULL<<endl;
}


Nedostatci:

  • koristi se eksplicitni konstruktor, npr p1(new int(10)); a ne može se koristiti oblik p1=new int(10);
  • nema aritmetike pointera
  • ne podržava logičke operatore
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

1 post • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.