Bruk av C ++ unique_ptr

Use C Unique_ptr



De smarte pekene brukes til å fordele ressursen dynamisk. Mange typer smarte pekere brukes i C ++ til forskjellige formål, for eksempel auto_ptr , unique_ptr , og delt_ptr . Auto_ptr -pekeren er utdatert i den nye versjonen av C ++. Den unike_ptr brukes som erstatning for auto_ptr. Objektet til denne pekeren kan ta eierskap til pekeren. Objektet til denne pekeren eier pekeren unikt, og ingen annen peker kan peke på objektet. Unique_ptr sletter objektene automatisk. Denne pekeren administrerer disse objektene hvis objektene blir ødelagt, eller verdien av objektet endres eller funksjonen reset () kalles. Funksjonene til unique_ptr og bruken av denne pekeren diskuteres i denne opplæringen.

Viktige komponenter:







To hovedkomponenter i unique_ptr -objektet er gitt nedenfor:



Lagret peker:



Den brukes til å administrere objektene som er opprettet av en unik peker. Den er opprettet på tidspunktet for pekeropprettelse, og den kan endres på forskjellige måter.





B. Lagret Deleter:

Det tar argumentet for den lagrede pekertypen som brukes til å slette det administrerte objektet. Den opprettes også på tidspunktet for pekeropprettelse, og den kan endres på forskjellige måter.



Eksempel 1: Lag et pekerobjekt i en klasse med Constructor

Måten å deklarere de unike pekerobjektene til en klasse og få tilgang til klassens metode er ved å bruke objektene som vist i følgende eksempel. En klasse med en konstruktør og en offentlig metode er deklarert i koden. Konstruktøren har tre argumenter. Den første unike pekeren er opprettet ved å kalle konstruktøren med tre argumentverdier. De Resultat() metode kalles av pekerobjektet som beregner summen av tre argumentverdier for konstruktøren. Deretter opprettes det andre unike pekerobjektet uten å ringe konstruktøren, og den første pekeren flyttes til den andre pekeren. De Resultat() metoden kalles av det andre pekerobjektet.

//Inkluder nødvendige biblioteker

#inkludere

#inkludere

usingnamespace std;

//Definer klassen
klasse tillegg{

int nummer1, nummer2, nummer3;
offentlig:
//Erklær konstruktøren
Addisjon(int a, int b, int c)
{
nummer1 = a;
nummer2 = b;
nummer3 = c;
}
//Angi metode for å beregnesum
int Resultat()
{
komme tilbakenummer1 + tall2 + tall3;
}
};
int main()
{
//Erklær den første pekeren
unique_ptr peker1(nytt tillegg(Fire fem,55,30));

koste<<'Resultatet av sum ved hjelp av den første pekeren:'<Resultat() <<' n';
//Erklær den andre pekeren
unik_ptr peker2;
//Flytt den første pekeren til den andre pekeren
peker2 = flytte(peker1);

koste<<'Resultatet av sum ved bruk av den andre pekeren:'<Resultat() <<' n';
return0;
}

Produksjon:

Følgende utdata vises etter at koden ovenfor er utført. Summen av 45, 55 og 30 er 130 som er skrevet ut for begge pekene.

Eksempel 2: Lag et pekerobjekt i en klasse med Constructor og Destructor

Måten å erklære et unikt pekerobjekt i en klasse med konstruktør og destruktor har blitt vist i følgende eksempel. Klassen inneholder en konstruktør med ett argument, en offentlig metode som heter Display () til verdien av klassevariabelen, og en destruktor som vil skrive ut en ødeleggelsesmelding før objektet til klassen ødelegges. Display () -metoden kalles etter at du har opprettet det unike pekerobjektet i koden.

//Inkluder nødvendige biblioteker

#inkludere

#inkludere

usingnamespace std;

//Definer klassen
klasse Kunde
{
strengnavn;

offentlig:
//Erklær konstruktøren
Kunde(streng n)
{
navn = n;
koste<<'Ressursen er tildelt. n';
}

//Angi metode for å skrive ut kundenavnet
ugyldig visning()
{
koste<<'Navnet på kunden er:'<<Navn<<' n';
}

//Erklær destruktoren
~ Kunde()
{
koste<<'Ressursen er ødelagt. n';
}
};
int main()
{
//Tildel ressursobjektet som eies av unique_ptr
unique_ptruPointer{ny kunde('Mir Abbas') };
uPointer->Vise();
return0;
}

Produksjon:

Følgende utdata vises etter at koden ovenfor er utført:

Eksempel 3: Kontroller pekeren etter overføring av eierskapet

Måten å kontrollere eierskapet til den unike pekeren har vist i følgende eksempel ved å opprette to unike pekere i en klasse. En klasse med to strengvariabler og en offentlig metode er deklarert i koden. Metoden Book_details () for klassen kalles etter å ha opprettet det første unike pekerobjektet i klassen. Deretter er det andre unike pekerobjektet opprettet, og den første pekeren er flyttet til den andre pekeren som ødelegger den første pekeren. Eierskapet til begge pekene bør sjekkes senere.

//Inkluder nødvendige biblioteker

#inkludere

#inkludere

usingnamespace std;

//Definer klassen
klasse Bok{

streng tittel ='C ++ programmeringsspråk';
streng forfatter ='Bjarne Stroustrup';

offentlig:
//Angi metode for å skrive ut bokdetaljer
voidBook_details()
{
koste<<'Boknavn:'<<tittel<<' n';
koste<<'Forfatternavn:'<<forfatter<<' n';
}
};
int main()
{
//Erklær den første pekeren
unique_ptr peker1(ny bok());

peker1->Bok_detaljer();
//Erklær den andre pekeren
unik_ptr peker2;
//Flytt den første pekeren til den andre pekeren
peker2 = flytte(peker1);

//Sjekk den første pekeren
hvis (static_cast(peker1))koste<<'Den første poineren er ikke null n';
elsecout<<'Den første poineren er null n';
//Sjekk den andre pekeren
hvis (static_cast(peker2))koste<<'Den andre poineren er ikke null n';
elsecout<<'Den andre poineren er null n';

return0;
}

Produksjon:

Følgende utdata vises etter at koden ovenfor er utført. I henhold til utgangen ble eierskapet til den første pekeren fjernet, og meldingen, Den første pekeren er null har skrevet ut for den første pekeren. Eierskapet til den andre pekeren eksisterer, og meldingen, Den første pekeren er ikke null har skrevet ut for den andre pekeren:

Konklusjon:

Formålet med å bruke en unik peker i C ++ - programmering har blitt beskrevet i denne opplæringen ved å bruke flere eksempler. Måtene å lage en unik peker, overføre eierskapet til pekeren og kontrollere det nåværende eierskapet til pekeren er blitt forklart her for å hjelpe leserne til å kjenne bruken av den unike pekeren på riktig måte.