Smart peker i C ++

Smart peker i C ++
Smart peker er et veldig viktig konsept introdusert i C++. Smart peker brukes i C ++ for å løse problemet med å bruke normal peker. For å fjerne ulempene med den normale pekeren, eksisterer smart peker i C++.

Smart peker vs vanlig peker

De to hovedproblemene med å bruke vanlige pekere er:

en. Vanlig peker kan ikke administrere minneutnyttelse effektivt.

b. Det kan ikke frigjøre minneobjektet når de ikke brukes i programmet.

c. Ettersom den normale pekeren ikke kan fordele minnet om objektet, hvis pekeren fjernes fra programmet, blir ikke adressen til minneobjektet som peker ut av pekeren funnet funnet. Som et resultat, hukommelsestap skjer.

For dette bruker vi den smarte pekeren over den vanlige pekeren. Fordelene med smarte pekere i forhold til vanlige pekere er:

en. Det administrerer minnet automatisk.

b. Den ga ut minnet om objektet når de ikke brukes i programmet.

c. Det tildeler minnet om objektet når pekeren går ut av omfanget i programmet.

d. Smart peker brukes i C ++ for å tildele objektene, krysse i de forskjellige typer datastruktur og administrerer forskjellige typer lambda -uttrykk for å passere inne i funksjonen.

e. Det gjør programmet vårt veldig sikkert og trygt. Som et resultat blir programmet til å være veldig enkelt å forstå og bli lettere å feilsøke.

Ulike typer smarte pekere

Normalt er det tre typer smarte pekere tilgjengelig i C++. De er:

en. Unik

b. Delt

c. Svak.

Vi vil diskutere hver av dem nedenfor.

en. Unik peker

en. Unik peker holder en peker til et objekt. Den frigjør minnet om objektet når det går ut av omfanget.

b. En av de unike egenskapene til den unike pekeren er at det bare er en kopi av et objekt som er til stede i minnet. Ingen andre ressurser kan peke på det aktuelle objektet.

c. Hvis mange ressurser er tilgjengelige for ett objekt i koden, oppstår det en sammenkomstidsfeil.

Programmering Eksempel 1:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Klassen Square
int side;
offentlig:
Firkant (int s)

side = S;

int område ()

return (side*side);

;
int main ()

unik_ptr P1 (ny firkant (2));
cout< area () <retur 0;

Produksjon:

Forklaring:

Her opprettet vi en klasse som heter Square. Inne i klassen er en variabel side erklært og ringer konstruktøren for å initialisere verdien av sidevariabelen. Nå definerte vi en funksjon som heter område som returnerer områdeverdien.

Inne i hovedfunksjonen () erklærte vi en unik peker som heter unik_ptr. Nå opprettet vi en peker P1 som peker objektet på klassen og inne i parentesen, passerer vi en verdi 2.

Hvis vi nå trykker området gjennom pekeren P1 som P1-> Area (), viser det området på torget er 4.

b. Delt peker

en. Delt peker kan brukes i programmet når vi ønsker å tilordne en peker til flere objektressurser.

b. Delt peker er en adresse generert telling smart peker, som kan brukes til å lagre og gi en referanse utover omfanget av en funksjon.

c. Det er veldig nyttig i OOP (Object Oriented Program). For å lagre en peker som medlemsvariabel, brukes delt peker.

d. Delt peker vil ikke bli slettet før alle ressursene har fullført oppgaven sin.

Programmering Eksempel 2:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Klassen Square
int side;
offentlig:
Firkant (int s)

side = S;

int område ()

return (side*side);

;
int main ()

Shared_Ptrp1 (New Square (2));
// introdusere delt peker;
Shared_Ptrp2;
P2 = P1;
coutcoutretur 0;

Produksjon:

Forklaring:

Dette programmeringseksemplet 2 er fortsettelsen av programmeringseksemplet 1. Inne i hovedfunksjonen () introduserte vi den delte pekeren. Ved hjelp av pekeren P1 opprettet vi gjenstanden for Square -klassen. Samme objekt er pekt med verdien P2-> Area () og P1-> Area (). Begge viser området på torget er 4.

c. Svak peker

en. Svak peker er et spesielt tilfelle av pekeren som skal brukes med de delte pekerne.

b. Svak peker har anlegg for å få tilgang til et objekt som eies av en eller flere delte pekerforekomster.

c. Det er ikke en del av referansetelling.

d. Vi bruker den svake pekeren i programmet når vi ønsker å observere et objekt, men krever ikke at det forblir i live.

Programmering Eksempel 3:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Klassen Square
int side;
offentlig:
Firkant (int s)

side = S;

int område ()

return (side*side);

;
int main ()

Shared_Ptrp1 (New Square (2));
svak_ptrw1;
svak_ptr w2 (W1);
svak_ptr w3 (P1);
cout<< "w1:" << w1.use_count()<cout<< "w2:" << w2.use_count()<cout<< "w3:" << w3.use_count()<retur 0;

Produksjon:

Forklaring:

Dette programmeringseksemplet 3 er fortsettelsen av programmeringseksemplet 2. Her introduserte vi en delt peker som heter Shared_PTR og opprettet en peker P1 for å peke gjenstanden for Square -klassen. Nå brukte vi den svake pekeren, svak_ptr som peker W1 og W2. Inne i W2 passerer vi W1. Vi opprettet en annen svak peker W3 der vi passerer pekeren P1.

Nå hvis vi skriver ut alle W1.bruk_count () og w2.use_count (), vil resultatet vises.

Konklusjon

Når vi diskuterer konseptet og bruken av smart peker i detalj, har vi kommet til denne konklusjonen at Smart Pointer blir introdusert i C ++ for å fjerne ulempene til den normale pekeren. Gjennom den smarte pekeren kan vi administrere forskjellige typer eiere og ressurser til objektet veldig effektivt. Vi håper denne artikkelen er nyttig. Sjekk ut andre Linux -hint -artikler for flere tips og opplæringsprogrammer.