Upotreba C ++ unique_ptr

Use C Unique_ptr



Pametni pokazivači koriste se za dinamičku alokaciju resursa. Mnoge vrste pametnih pokazivača koriste se u C ++ u različite svrhe, kao npr auto_ptr , unique_ptr , i shared_ptr . Pokazivač auto_ptr zastario je u novoj verziji C ++. Jedinstveni_ptr koristi se kao zamjena za auto_ptr. Objekt ovog pokazivača može preuzeti vlasništvo nad pokazivačem. Objekt ovog pokazivača jedinstveno posjeduje pokazivač i nijedan drugi pokazivač ne može ukazati na objekt. Unique_ptr automatski briše objekte. Ovaj pokazivač upravlja tim objektima ako su objekti uništeni, ili se promijeni vrijednost objekta ili pozove funkcija reset (). O značajkama unique_ptr i upotrebi ovog pokazivača govori se u ovom vodiču.

Glavne komponente:







Dvije glavne komponente objekta unique_ptr dolje su navedene:



A. Pohranjeni pokazivač:



Koristi se za upravljanje objektima stvorenim jedinstvenim pokazivačem. Nastaje u vrijeme stvaranja pokazivača i može se mijenjati na različite načine.





B. Spremljeni brisač:

Uzima argument spremljene vrste pokazivača koji se koristi za brisanje upravljanog objekta. Također se stvara u vrijeme stvaranja pokazivača, a može se promijeniti na različite načine.



Primjer 1: Stvorite objekt pokazivača klase s konstruktorom

Način deklariranja jedinstvenih objekata pokazivača klase i pristupa metodi klase je upotreba objekata kako je prikazano u sljedećem primjeru. Klasa s konstruktorom i javnom metodom deklarirana je u kodu. Konstruktor ima tri argumenta. Prvi jedinstveni pokazivač kreiran je pozivanjem konstruktora s tri vrijednosti argumenta. The Proizlaziti() method poziva pokazivački objekt koji izračunava zbroj tri vrijednosti argumenta konstruktora. Zatim se stvara drugi jedinstveni objekt pokazivača bez pozivanja konstruktora, a prvi se pokazivač pomiče na drugi pokazivač. The Proizlaziti() metodu poziva drugi objekt pokazivača.

//Uključite potrebne knjižnice

#uključi

#uključi

usingnamespace std;

//Definirajte klasu
razred Dodatak{

int broj1, broj2, broj3;
javnost:
//Deklarirajte konstruktor
Dodatak(int a, int b, int c)
{
broj1 = a;
broj2 = b;
broj3 = c;
}
//Navedite način izračunavanjaiznos
int Rezultat()
{
povratakbroj1 + broj2 + broj3;
}
};
int main()
{
//Deklarirajte prvi pokazivač
jedinstveni_ptr pokazivač1(novi dodatak(Četiri pet,55,30));

trošak<<'Rezultat zbroja pomoću prvog pokazivača:'<Proizlaziti() <<' n';
//Proglasite drugi pokazivač
jedinstveni_ptr pokazivač2;
//Pomaknite prvi pokazivač na drugi pokazivač
pokazivač2 = pomakni(pokazivač1);

trošak<<'Rezultat zbroja pomoću drugog pokazivača:'<Proizlaziti() <<' n';
return0;
}

Izlaz:

Sljedeći izlaz će se pojaviti nakon izvršavanja gornjeg koda. Zbroj 45, 55 i 30 je 130 koji je tiskan za oba pokazivača.

Primjer 2: Stvorite objekt pokazivača klase s konstruktorom i destruktorom

Način deklariranja jedinstvenog objekta pokazivača klase s konstruktorom i destruktorom prikazan je u sljedećem primjeru. Klasa sadrži konstruktor s jednim argumentom, javnu metodu s imenom Display () na vrijednost varijable klase i destruktor koji će ispisati poruku uništavanja prije uništavanja objekta klase. Metoda Display () poziva se nakon stvaranja jedinstvenog objekta pokazivača u kodu.

//Uključite potrebne knjižnice

#uključi

#uključi

usingnamespace std;

//Definirajte klasu
klasa Kupac
{
naziv niza;

javnost:
//Deklarirajte konstruktor
Kupac(niz n)
{
ime = n;
trošak<<'Resurs je dodijeljen. n';
}

//Navedite način ispisa imena korisnika
prikaz praznine()
{
trošak<<'Ime kupca je:'<<Ime<<' n';
}

//Proglasite destruktor
~ Kupac()
{
trošak<<'Resurs je uništen. n';
}
};
int main()
{
//Dodijelite objekt Resource koji je u vlasništvu unique_ptr
unique_ptruPointer{novi kupac('Mir Abbas') };
uPointer->Prikaz();
return0;
}

Izlaz:

Nakon izvršavanja gornjeg koda pojavit će se sljedeći izlaz:

Primjer 3: Provjerite pokazivač nakon prijenosa vlasništva

Način provjere vlasništva nad jedinstvenim pokazivačem pokazao se u sljedećem primjeru stvaranjem dva jedinstvena pokazivača klase. U kodu je deklarirana klasa s dvije string varijable i javnom metodom. Metoda Book_details () klase poziva se nakon stvaranja prvog jedinstvenog objekta pokazivača klase. Zatim je kreiran drugi jedinstveni objekt pokazivača, a prvi pokazivač je premješten na drugi pokazivač koji uništava prvi pokazivač. Vlasništvo nad oba pokazivača trebalo bi provjeriti kasnije.

//Uključite potrebne knjižnice

#uključi

#uključi

usingnamespace std;

//Definirajte klasu
razredna knjiga{

naslov niza ='Programski jezik C ++';
autor niza ='Bjarne Stroustrup';

javnost:
//Navedite način ispisa pojedinosti o knjizi
voidBook_details()
{
trošak<<'Naziv knjige:'<<titula<<' n';
trošak<<'Ime autora:'<<Autor<<' n';
}
};
int main()
{
//Deklarirajte prvi pokazivač
jedinstveni_ptr pokazivač1(nova Knjiga());

pokazivač1->Pojedinosti o knjizi();
//Proglasite drugi pokazivač
jedinstveni_ptr pokazivač2;
//Pomaknite prvi pokazivač na drugi pokazivač
pokazivač2 = pomakni(pokazivač1);

//Provjeri prvi pokazivač
ako (static_cast(pokazivač1))trošak<<'Prvi poiner nije ništavan n';
elsecout<<»Prvi poiner je ništavan n';
//Provjerite drugi pokazivač
ako (static_cast(pokazivač2))trošak<<'Drugi poiner nije ništavan n';
elsecout<<'Drugi poiner je ništavan n';

return0;
}

Izlaz:

Sljedeći izlaz će se pojaviti nakon izvršavanja gornjeg koda. Prema ispisu, vlasništvo nad prvim pokazivačem uklonjeno je, a poruka, Prvi pokazivač je null je tiskao za prvi pokazivač. Vlasništvo nad drugim pokazivačem postoji, a poruka, Prvi pokazivač nije null je ispisao za drugi pokazivač:

Zaključak:

Svrhe korištenja jedinstvenog pokazivača u programiranju na C ++ opisane su u ovom vodiču pomoću više primjera. Ovdje su objašnjeni načini stvaranja jedinstvenog pokazivača, prijenosa vlasništva pokazivača i provjere trenutnog vlasništva pokazivača kako bi se čitateljima pomoglo da pravilno znaju korištenje jedinstvenog pokazivača.