C ++ Enabled_shared_from_this

C ++ Enabled_shared_from_this
Den smarte pekeren gjør oss i stand til å hente den delte pekeren fra denne pekeren i en medlemsfunksjon. For å gjøre dette, brukes enable_shared_from_this -klassen. Det er en baseklasse som gjør det mulig for koderen å la objektet generere tilleggsforekomstene for den delte pekeren, eller vi kan si at det tillater eierandel av de delte pekerne. En aktivert_shared_from_this er en vanlig teknikk som lar et administrert delt PTR -objekt få en delt PTR på egen hånd når det er nødvendig. Det brukes sannsynligvis når vi kaller en funksjon fra en medlemsfunksjon. Vi passerer "dette" som et argument til den funksjonen.

Å passere dette som en rå peker bryter begrensningen ved å overføre rå og delte pekere til den samme minneblokken, noe som gjør den delte pekeren ubrukelig. Det er også en annen metode for å utføre den samme funksjonaliteten som levert av enable_shared_from_this class. Men den metoden involverer den dynamiske rollebesetningen.

Det gir følgende medlemsfunksjoner:

Konstruktør gjør oss i stand til å konstruere et objekt.

Destruktører La oss ødelegge objektet.

Operatør “=”lar oss returnere referansen til "denne" pekeren.

Shared_from_this brukes til å returnere den delte pekeren som deler eierskapet til "*denne" pekeren.

Svak_from_this Returnerer eierskapet til den svake pekeren som deler eierskap med “*dette” -pekeren.

Syntaks:

mal Klasse enable_shared_from_this;

Det tidligere viste er syntaks for enable_shared_from_this baseklasse. T betegner hvilken type klasse som må defineres i denne syntaksen.

Eksempel 1:

Nå prøver vi et eksempel for Enable_Shared_From_This Base -klassen for å sjekke det og hvordan den implementeres. La oss først inkludere overskriftsfilene våre. Den første er "minnet". Den andre er "iostream". Minnet brukes til å gjøre det mulig. Den andre er "iostream" der den brukes til å tillate inngangsutgangsoperasjoner som utføres i koden for å vise dataene som er ønsket å vise. Nå, ved å bruke strukturen, definerer vi et objekt som heter “shrd_class”. Vi erklærer vår baseklasse “enable_shared_from_this” som vi passerer “shrd_class”. Dette betyr at objektet er en baseklasse av enable_shared_from_this.

Strukturen er måten å gruppere de forskjellige beslektede variablene til ett sted. I vårt tilfelle samler vi pekervariablene i en klasse som er "OBJ". Inne i objektet kaller vi først en konstruktør eller "shrd_class" -objektet. Deretter erklærer vi en get_class () -funksjonen til den delte pekeren til "shrd_class" -typen som viser "eierforholdet" -meldingen når "get_class" -funksjonen kalles og returnerer den delte_from_this -metoden levert av enable_shared_from_this -klassen som aktiverer objektet for å generere forekomstene av den delte pekeren.

Nå drar vi til hovedfunksjonen vår der vi erklærer en delt peker av "SHRD_CLASS" -typeobjekt som vi kaller “PF1”. Vi tildeler pekeren “SHRD_CLASS” ved hjelp av det nye nøkkelordet i minnets haug. Deretter erklærer vi en "PF2" -variabel av biltype som vi tildeler "get_class ()" ved å bruke "PF1" delte peker. Operatøren “->” som vi bruker i denne linjen betyr at vi får tilgang til medlemsfunksjonen til ethvert objekt enten det er av en union, struktur osv. Bruke pekeren. I dette eksemplet får vi tilgang til get_class () -metoden til "OBJ" -strukturklassen ved å bruke “PF1” -pekeren.

#inkludere
#inkludere
struct shrd_class: public std :: enable_shared_from_this
shrd_class ()
std :: shared_ptrget_class ()
std :: cout<< "ownership shared" << std::endl;
return shared_from_this ();

;
int main ()
std :: shared_ptr pf1 (new shrd_class);
auto pf2 = pf1-> get_class ();

Nå, når vi ser frem til utdataene våre, viste vi vellykket meldingen som betyr at "PF1" er forekomsten av "SHRD_CLASS" -objektet og deler eierskapet. Vi kan se dette på skjermbildet som vises i følgende:

Eksempel 2:

La oss utføre et annet eksempel der vi oppretter to delte pekere som deler sitt eierskap. La oss nå gå videre til vår følgende viste kode. Vi erklærer først overskriftsfilene "iostream" og "Memory" headerfilen. Etter det erklærer vi en enable_shared_from_this baseklasse kalt “OBJ” ved hjelp av strukturer. Nå flytter vi til hovedfunksjonen vår der vi utfører delingen av objektet mellom to forskjellige delte pekere. Inne. I neste linje til pekeren “SHRD_PTR_1”, tildeler vi “make_shared () -metoden som brukes til å tildele et objekt av typen“ obj ”og returnere Shared_PTR -objektet.

Deretter tildeler vi vår andre peker shared_from_this () -metode som lar oss returnere pekeren som deler eierskapet til "*denne" pekeren. I dette deler "SHRD_PTR_1" sitt eierskap med "SHRD_PTR_2". Etter det bruker vi IF () -erklæringen der vi passerer to forhold. Den første “shrd_ptr_1.Eier_Before (SHRD_PTR_2) ”i denne Eieren_Before er medlemsfunksjonen som returnerer den boolske verdien True eller False hvis denne delte pekeren er bestilt før den passerte pekeren.

I vårt tilfelle sjekker det om “SHRD” PTR_1 ”er bestilt før“ SHRD_PTR_2 ”eller ikke. Den andre tilstanden er omvendt. I den sjekker vi om “SHRD_PTR_2” er mindre enn eller bestilt før “SHRD_PTR_1”. Hvis begge disse tilstandene ikke oppstår, beveger den seg inne i IF () -uttalelsen og viser meldingen “SHRD_PTR_1 og“ SHRD_PTR_2 ”og deler eierskapet. Til slutt returnerer vi nullverdien, noe som betyr at koden utfører vellykket uten feil.

#inkludere
#inkludere
struct obj: std :: enable_shared_from_this ;
int main ()
STD :: Shared_PTR SHRD_PTR_1, SHRD_PTR_2;
SHRD_PTR_1 = std :: make_shared ();
SHRD_PTR_2 = SHRD_PTR_1-> shared_from_this ();
hvis (!SHRD_PTR_1.eier_before (shrd_ptr_2) && !SHRD_PTR_2.Eier_Before (SHRD_PTR_1))
std :: cout<< "shrd_ptr_1 and shrd_ptr_2 share ownership";
retur 0;

Som vi kan se i utdataene fra den gitte koden, viser den meldingen vellykket. Det betyr at eierskapet mellom begge delte pekere “SHRD_PTR_1” og “SHRD_PTR_2” deles med suksess ved hjelp av Enable_Shared_From_This Base Class og dets medlemsfunksjoner.

Konklusjon

I denne opplæringen beskrev vi metodene for hvordan du bruker enable_shared_from_this -klassen og grunnen til at de brukes og hvordan de gjør det enkelt for brukerne å dele eierskapet til tips mellom dem. Vi prøvde vårt beste for å forklare enable_shared_from_his -klassen. Vi håper at denne artikkelen er nyttig for deg å få en bedre forståelse.