Uporaba C ++ unique_ptr

Use C Unique_ptr



Pametni kazalci se uporabljajo za dinamično dodeljevanje vira. Mnoge vrste pametnih kazalcev se v C ++ uporabljajo za različne namene, npr auto_ptr , unique_ptr , in shared_ptr . Kazalec auto_ptr je v novi različici C ++ zastarel. Unique_ptr se uporablja za zamenjavo auto_ptr. Objekt tega kazalca lahko prevzame lastništvo kazalca. Objekt tega kazalca je edinstven lastnik kazalca in noben drug kazalec ne more kazati na objekt. Unique_ptr samodejno izbriše predmete. Ta kazalec upravlja te objekte, če so objekti uničeni ali če se vrednost predmeta spremeni ali se pokliče funkcija reset (). V tej vadnici so obravnavane funkcije unique_ptr in uporaba tega kazalca.

Glavne komponente:







Spodaj sta dve glavni komponenti predmeta unique_ptr:



A. Shranjeni kazalec:



Uporablja se za upravljanje predmetov, ustvarjenih z edinstvenim kazalcem. Ustvarjen je v času ustvarjanja kazalca in ga je mogoče spremeniti na različne načine.





B. Shranjeni izbrisalec:

Vzame argument shranjenega tipa kazalca, ki se uporablja za brisanje upravljanega objekta. Ustvarjen je tudi v času ustvarjanja kazalca in ga je mogoče spremeniti na različne načine.



Primer 1: Ustvarjanje kazalnega predmeta razreda s konstruktorjem

Način razglasitve edinstvenih kazalnih objektov razreda in dostopa do metode razreda je z uporabo predmetov, kot je prikazano v naslednjem primeru. V kodi je bil razglašen razred z konstruktorjem in javno metodo. Konstruktor ima tri argumente. Prvi edinstven kazalec je bil ustvarjen s klicem konstruktorja s tremi vrednostmi argumentov. The Rezultat () method pokliče objekt kazalca, ki izračuna vsoto treh vrednosti argumentov konstruktorja. Nato se ustvari drugi edinstven objekt kazalca brez klicanja konstruktorja, prvi kazalec pa se premakne v drugi kazalec. The Rezultat () metodo pokliče drugi kazalec.

//Vključite potrebne knjižnice

#vključi

#vključi

usingnamespace std;

//Določite razred
dodatek razreda{

int številka1, številka2, številka3;
javno:
//Razglasite konstruktor
Dodatek(int a, int b, int c)
{
število1 = a;
število2 = b;
število3 = c;
}
//Navedite metodo za izračunvsota
int Rezultat()
{
vrnitevštevilo1 + število2 + število3;
}
};
int main()
{
//Razglasite prvi kazalec
unikatni_ptr kazalec1(nov dodatek(Štiri, pet,55,30));

stroški<<'Rezultat vsote z uporabo prvega kazalca:'<Rezultat() <<' n';
//Razglasite drugi kazalec
unikatni_ptr kazalec2;
//Premaknite prvi kazalec na drugi kazalec
kazalec2 = premakni(kazalec1);

stroški<<'Rezultat vsote z uporabo drugega kazalca:'<Rezultat() <<' n';
return0;
}

Izhod:

Po izvedbi zgornje kode se prikaže naslednji izhod. Vsota 45, 55 in 30 je 130, ki je bila natisnjena za oba kazalca.

Primer 2: Ustvarjanje kazalnega predmeta razreda s konstruktorjem in destruktorjem

Način razglasitve edinstvenega kazalnega predmeta razreda s konstruktorjem in destruktorjem je bil prikazan v naslednjem primeru. Razred vsebuje konstruktor z enim argumentom, javno metodo z imenom Display () do vrednosti spremenljivke razreda in destruktor, ki bo natisnil sporočilo za uničenje, preden uniči predmet razreda. Metoda Display () se pokliče po ustvarjanju edinstvenega predmeta kazalca v kodi.

//Vključite potrebne knjižnice

#vključi

#vključi

usingnamespace std;

//Določite razred
odjemalca razreda
{
ime niza;

javno:
//Razglasite konstruktor
Stranka(niz n)
{
ime = n;
stroški<<„Sredstva so dodeljena. n';
}

//Navedite način tiskanja imena stranke
prikazovalnik void()
{
stroški<<'Ime stranke je:'<<ime<<' n';
}

//Razglasite destruktor
~ Stranka()
{
stroški<<„Vir je uničen. n';
}
};
int main()
{
//Dodelite predmet Resource, ki je v lasti unique_ptr
unique_ptruPointer{nova stranka('Mir Abbas') };
uPointer->Zaslon();
return0;
}

Izhod:

Po izvedbi zgornje kode se prikaže naslednji izhod:

Primer 3: Preverite kazalec po prenosu lastništva

Način preverjanja lastništva edinstvenega kazalca je prikazan v naslednjem primeru z ustvarjanjem dveh edinstvenih kazalcev razreda. V kodi je bil razglašen razred z dvema spremenljivkama niza in javno metodo. Metoda Book_details () razreda se pokliče po ustvarjanju prvega edinstvenega predmeta kazalca razreda. Nato je bil ustvarjen drugi edinstven objekt kazalca in prvi kazalec je bil premaknjen na drugi kazalec, ki uniči prvega kazalca. Lastništvo obeh kazalcev je treba preveriti pozneje.

//Vključite potrebne knjižnice

#vključi

#vključi

usingnamespace std;

//Določite razred
razredna knjiga{

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

javno:
//Navedite način tiskanja podrobnosti o knjigi
voidBook_details()
{
stroški<<'Ime knjige:'<<naslov<<' n';
stroški<<'Ime avtorja:'<<avtor<<' n';
}
};
int main()
{
//Razglasite prvi kazalec
unikatni_ptr kazalec1(nova knjiga());

kazalec1->Podrobnosti o knjigi();
//Razglasite drugi kazalec
unikatni_ptr kazalec2;
//Premaknite prvi kazalec na drugi kazalec
kazalec2 = premakni(kazalec1);

//Preverite prvi kazalec
če (static_cast(kazalec1))stroški<<„Prvi poiner ni nič n';
elsecout<<„Prvi poiner je ničen n';
//Preverite drugi kazalec
če (static_cast(kazalec 2))stroški<<„Drugi poiner ni nič n';
elsecout<<„Drugi poiner je ničen n';

return0;
}

Izhod:

Po izvedbi zgornje kode se prikaže naslednji izhod. Glede na izhod je bilo lastništvo prvega kazalca odstranjeno in sporočilo, Prvi kazalec je ničelni je natisnil prvi kazalec. Lastništvo drugega kazalca obstaja in sporočilo, Prvi kazalec ni nič je za drugi kazalec natisnil:

Zaključek:

Namen uporabe edinstvenega kazalca pri programiranju C ++ je bil opisan v tej vadnici z uporabo več primerov. Tu so razloženi načini ustvarjanja edinstvenega kazalca, prenosa lastništva kazalca in preverjanja trenutnega lastništva kazalca, da bi bralcem pomagali pravilno poznati uporabo edinstvenega kazalca.