C ++ STD Unique_PTR

C ++ STD Unique_PTR
En unik peker er en smart peker. For å diskutere hva en unik peker er, må vi forstå hva smarte pekere er. Prosessen med å legge til og fjerne elementer kan automatiseres med smarte pekere. Smarte pekere betyr at når du ringer nå, trenger du ikke å ringe sletting og i mange tilfeller med smarte pekere, trenger vi ikke en gang å ringe nye. Smarte pekere er best på den måten å få alt dette til å skje.

Hver gang den smarte pekeren opprettes, vil den automatisk ringe ny og tildele minneskuffen. Deretter, basert på hvilken smart peker du bruker, vil minnet automatisk bli gratis. La oss nå komme til hovedemnet vårt, den unike pekeren. En unik peker vil bli eliminert når den går ut av omfang. Unike pekere kan ikke kopieres til den andre pekeren om den er av samme datatype fordi en unik peker peker på et minne. Hvis den unike pekeren er kopiert, betyr det om gangen to tips peker på samme minneskikk. Så det er grunnen til at vi ikke kan kopiere unike pekere. Unike pekere sørg for at de sletter objektene sine med dem.

Syntaks

Syntaksen for å lage en unik peker er som følger:

STD :: Unique_PTR P (ny int);

Her blir det dynamisk opprettede objektet også ødelagt når den unike pekeren i seg selv blir ødelagt.

Eksempel # 01:

For å forstå unike pekere mer dybde, vil vi gi et eksempel. I dette eksemplet har vi definert en struktur som heter person. “Person” har en konstruktør som tar en streng som en parameter og skriver ut verdien. Den har også en destruktør som ved ødeleggelse vil trykke "slettet" slik at vi kan forstå at personen blir ødelagt. Inne i hovedmetoden har vi erklært en unik peker og gitt den en verdi “Jack.”.

Nå vil denne pekeren ta "Jack" og gi den til minnet den peker på som er strukturen "person". Verdien “Jack” vil gå til konstruktøren og vil bli skrevet ut. Etter det vil den unike pekeren automatisk slette objektet og "slettet!”Vil bli skrevet ut på skjermen. La oss nå kjøre og utføre koden vår for å se utdataene.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
struct person

Person (streng n): navn (n)

cout<
~ Person ()

cout<< "Deleted!";

strengnavn;
;
int
Main ()

auto p = make_unique ("jack");
retur 0;

Koden vår er utført med hell og gir oss forventet utdata. Den unike pekeren har tatt verdien “Jack” og gitt den til konstruktøren fordi den pekte mot gjenstanden for “personen” -strukturen. Konstruktøren har skrevet ut verdien. Etter det skrives "slettet". Nå, her, har vi bare skrevet ut verdien. Men i sanntidsscenarier kan vi utføre alle operasjoner, og etter at operasjonen er utført, vil objektet med struktur eller klasse selv bli ødelagt.

Eksempel # 02:

I dette eksemplet har vi prøvd å forklare den unike konstruktøren i detaljer. Vi har også prøvd å lage en unik peker annerledes, slik at du kan forstå de forskjellige syntaksene og tilnærmingene for å lage unike pekere. For å utføre dette eksemplet har vi laget en klasse som heter “Uniqueptr”. I denne klassen har vi en konstruktør av denne klassen og en destruktør. I det tidligere eksemplet forklarte vi at vi kan gjøre hvilken operasjon vi vil ha i konstruktøren. I dette eksemplet har vi prøvd å gjøre det for å gi deg en praktisk opplevelse.

Så i konstruktøren først har vi skrevet ut "In Constructor" for å gi brukeren beskjed om at vi er i konstruktøren vår for øyeblikket. Etter det har vi erklært to heltall “x” og “y” som inneholder verdiene til henholdsvis "2" og "3". Etter det erklærte vi en annen variabel som også er et heltall: “Z”. Vi har oppsummert eller lagt til verdiene til “x” og “y” og lagret utgangen i “z” heltall. I linjen nummer 13 har vi skrevet ut "Operation Performed", og vi har også skrevet ut verdien av "Z" mot den, slik at vi kan la brukeren få vite at operasjonen utføres og verdien etter at operasjonen er som følger.

I vår destruktør har vi ganske enkelt skrevet ut "i destruktør". I hovedmetoden har vi ganske enkelt laget den unike pekeren og passert den klassenavnet slik at den kan forstå hvilket minne det har å peke mot. Nå vil vi utføre koden vår for å bekrefte utdataene.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Klasse Uniqueptr

offentlig:
Uniqueptr ()

cout<<”In constructor”<int x = 2;
int y = 3;
int z = x + y;
cout<<”Operation Performed = “<
~ UniquePtr ()

cout<<”In Destructor”<
;
int main ()

std :: unik_ptr x = std :: unik_ptr (new uniqueptr);
retur 0;

Etter at koden vår er utført, er følgende utgangen vi får fra systemet. En ting å forklare her er at vi i vår viktigste metode ikke skapte noe objekt i klassen for å få tilgang til den. I stedet opprettet vi bare en unik peker og pekte den mot klassen vår. Systemet har skrevet ut "In Constructor" som betyr at det har gått i konstruktøren og den andre trykte linjen forklarer også at systemet har utført tilleggsoperasjonen på heltallene og trykket verdien mot den trykte meldingen. Til slutt flyttet kompilatoren inn i destruktøren, trykket meldingen og ødela objektet for klassen. En ting å merke seg her er at vi ikke opprettet eller slettet minnehaugen her. Hele denne saken ble gjort av vår unike peker.

Konklusjon

I denne guiden diskuterte vi en type smart peker som er en unik peker. Unike pekere er smarte pekere som hjelper oss med minnetildeling og minnestyring. Så for å forstå unike pekere forklarte vi først smarte pekere og unike pekere. Etter det forklarte vi syntaksen til unike pekere. Flere eksempler ble utført under forskjellige scenarier for å få leseren til å forstå unike pekere praktisk talt.