Brug af C ++ unique_ptr

Use C Unique_ptr



De smarte tips bruges til at allokere ressourcen dynamisk. Mange typer af smarte tips bruges i C ++ til forskellige formål, f.eks auto_ptr , unik_ptr , og delt_ptr . Auto_ptr -markøren er udfaset i den nye version af C ++. Den unikke_ptr bruges til udskiftning af auto_ptr. Objektet med denne markør kan tage ejerskab af markøren. Objektet med denne markør ejer markøren entydigt, og ingen anden markør kan pege på objektet. Unik_ptr sletter objekterne automatisk. Denne markør administrerer disse objekter, hvis objekterne ødelægges, eller objektets værdi ændres, eller reset () -funktionen kaldes. Funktionerne i unique_ptr og anvendelsen af ​​denne markør diskuteres i denne vejledning.

Vigtigste komponenter:







To hovedkomponenter i unique_ptr -objektet er angivet nedenfor:



A. Lagret markør:



Det bruges til at styre de objekter, der er skabt af en unik markør. Det er oprettet på tidspunktet for markøroprettelse, og det kan ændres på forskellige måder.





B.Lagret Deleter:

Det tager argumentet for den lagrede markørtype, der bruges til at slette det administrerede objekt. Det oprettes også på tidspunktet for markøroprettelse, og det kan ændres på forskellige måder.



Eksempel 1: Opret et pointerobjekt i en klasse med Constructor

Måden at erklære de unikke markørobjekter for en klasse og få adgang til klassens metode på er ved at bruge objekterne som vist i følgende eksempel. En klasse med en konstruktør og en offentlig metode er blevet erklæret i koden. Konstruktøren har tre argumenter. Den første unikke markør er blevet oprettet ved at kalde konstruktøren med tre argumentværdier. Det Resultat() metode kaldes af markørobjektet, der beregner summen af ​​tre argumentværdier for konstruktøren. Dernæst oprettes det andet unikke markørobjekt uden at kalde konstruktøren, og den første markør flyttes til den anden markør. Det Resultat() metode kaldes af det andet markørobjekt.

//Inkluder nødvendige biblioteker

#omfatte

#omfatte

usingnamespace std;

//Definer klassen
klasse tilføjelse{

int nummer1, nummer2, nummer3;
offentlig:
//Erklær konstruktøren
Tilføjelse(int a, int b, int c)
{
nummer1 = a;
nummer2 = b;
nummer3 = c;
}
//Angiv metode til beregning afsum
int Resultat()
{
Vend tilbagenummer1 + tal2 + tal3;
}
};
int main()
{
//Angiv den første markør
unik_ptr -markør1(ny tilføjelse(Fire. Fem,55,30));

koste<<'Resultatet af sum ved hjælp af den første markør:'<Resultat() <<' n';
//Angiv den anden markør
unik_ptr pointer2;
//Flyt den første markør til den anden markør
pointer2 = flytte(markør1);

koste<<'Resultatet af sum ved hjælp af den anden markør:'<Resultat() <<' n';
return0;
}

Produktion:

Følgende output vises efter udførelse af ovenstående kode. Summen af ​​45, 55 og 30 er 130, der er blevet udskrevet for begge pointer.

Eksempel 2: Opret et pointerobjekt i en klasse med Constructor og Destructor

Måden at erklære et unikt pointerobjekt i en klasse med constructor og destructor er blevet vist i det følgende eksempel. Klassen indeholder en konstruktør med ét argument, en offentlig metode ved navn Display () til værdien af ​​klassevariablen og en destruktor, der udskriver en ødelægningsmeddelelse, før den ødelægger objektet for klassen. Display () -metoden kaldes efter oprettelse af det unikke markørobjekt i koden.

//Inkluder nødvendige biblioteker

#omfatte

#omfatte

usingnamespace std;

//Definer klassen
klasse Kunde
{
streng navn;

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

//Angiv metode til udskrivning af kundens navn
ugyldigt display()
{
koste<<'Kundens navn er:'<<navn<<' n';
}

//Erklær destruktoren
~ Kunde()
{
koste<<'Ressourcen er ødelagt. n';
}
};
int main()
{
//Tildel ressourceobjektet, der ejes af unique_ptr
unique_ptruPointer{ny kunde('Mir Abbas') };
uPointer->Skærm();
return0;
}

Produktion:

Følgende output vises efter udførelse af ovenstående kode:

Eksempel 3: Kontroller markøren efter overdragelse af ejerskabet

Måden at kontrollere ejerskabet af den unikke markør har vist i følgende eksempel ved at oprette to unikke pointer i en klasse. En klasse med to strengvariabler og en offentlig metode er blevet erklæret i koden. Metoden Book_details () kaldes efter oprettelse af klassens første unikke markørobjekt. Dernæst er det andet unikke markørobjekt blevet oprettet, og den første markør er blevet flyttet til den anden markør, der ødelægger den første markør. Ejendomsretten til begge pointer skal kontrolleres senere.

//Inkluder nødvendige biblioteker

#omfatte

#omfatte

usingnamespace std;

//Definer klassen
klasse Bog{

streng titel ='C ++ programmeringssprog';
streng forfatter ='Bjarne Stroustrup';

offentlig:
//Angiv metode til at udskrive bogdetaljer
voidBook_details()
{
koste<<'Bognavn:'<<titel<<' n';
koste<<'Forfatternavn:'<<forfatter<<' n';
}
};
int main()
{
//Angiv den første markør
unik_ptr -markør1(ny bog());

pointer1->Bogdetaljer();
//Angiv den anden markør
unik_ptr pointer2;
//Flyt den første markør til den anden markør
pointer2 = flytte(markør1);

//Tjek den første markør
hvis (statisk_cast(markør1))koste<<'Den første pointer er ikke nul n';
elsecout<<'Den første pointer er null n';
//Kontroller den anden markør
hvis (statisk_cast(markør2))koste<<'Den anden pointer er ikke null n';
elsecout<<'Den anden pointer er null n';

return0;
}

Produktion:

Følgende output vises efter udførelse af ovenstående kode. Ifølge output blev ejerskabet til den første markør fjernet, og meddelelsen, Den første markør er nul har trykt til den første markør. Ejerskabet til den anden markør eksisterer, og meddelelsen, Den første markør er ikke nul har udskrevet den anden markør:

Konklusion:

Formålet med at bruge en unik markør i C ++ - programmering er blevet beskrevet i denne vejledning ved hjælp af flere eksempler. Måderne til at oprette en unik markør, overføre ejerskabet til markøren og kontrollere det nuværende ejerskab af markøren er blevet forklaret her for at hjælpe læserne med at kende brugen af ​​den unikke markør korrekt.