C ++: n yksilöllinen_ptr

Use C Unique_ptr



Älykkäitä osoittimia käytetään resurssin kohdistamiseen dynaamisesti. C ++: ssa käytetään monenlaisia ​​älykkäitä osoittimia eri tarkoituksiin, kuten auto_ptr , yksilöllinen_ptr ja jaettu_ptr . Auto_ptr -osoitin on poistettu käytöstä C ++: n uudessa versiossa. Uniikki_ptr -arvoa käytetään korvaamaan auto_ptr. Tämän osoittimen kohde voi ottaa osoittimen omistajuuden. Tämän osoittimen kohde omistaa osoittimen yksilöllisesti, eikä mikään muu osoitin voi osoittaa kohteeseen. Unique_ptr poistaa objektit automaattisesti. Tämä osoitin hallitsee näitä objekteja, jos objektit tuhoutuvat tai objektin arvo muuttuu tai toiminto (reset) kutsutaan. Tässä opetusohjelmassa käsitellään yksilöllisen_ptr: n ominaisuuksia ja tämän osoittimen käyttöä.

Pääkomponentit:







Unique_ptr -objektin kaksi pääkomponenttia on esitetty alla:



Tallennettu osoitin:



Sitä käytetään ainutlaatuisen osoittimen luomien objektien hallintaan. Se luodaan osoittimen luomishetkellä, ja sitä voidaan muuttaa eri tavoin.





Tallennettu deleteri:

Se ottaa tallennetun osoitintyypin argumentin, jota käytetään hallitun objektin poistamiseen. Se luodaan myös osoittimen luomishetkellä, ja sitä voidaan muuttaa eri tavoilla.



Esimerkki 1: Luo luokan osoitinobjekti konstruktorilla

Tapa ilmoittaa luokan yksilölliset osoitinobjektit ja käyttää luokan menetelmää on käyttää seuraavan esimerkin mukaisia ​​objekteja. Luokka, jossa on konstruktori ja julkinen menetelmä, on ilmoitettu koodissa. Rakentajalla on kolme argumenttia. Ensimmäinen ainutlaatuinen osoitin on luotu kutsumalla konstruktori kolmella argumenttiarvolla. The Tulos() metodia kutsuu osoitinobjekti, joka laskee konstruktorin kolmen argumenttiarvon summan. Seuraavaksi luodaan toinen ainutlaatuinen osoitinobjekti kutsumatta konstruktoria ja ensimmäinen osoitin siirretään toiseen osoittimeen. The Tulos() menetelmää kutsuu toinen osoitinobjekti.

//Sisällytä tarvittavat kirjastot

#sisältää

#sisältää

usingnamespace std;

//Määrittele luokka
luokan lisäys{

int numero1, numero2, numero3;
julkinen:
//Ilmoita rakentaja
Lisäys(int a, int b, int c)
{
luku1 = a;
luku2 = b;
luku3 = c;
}
//Ilmoita menetelmä laskeasumma
int Tulos()
{
palatanumero1 + numero2 + numero3;
}
};
int pää()
{
//Ilmoita ensimmäinen osoitin
yksilöllinen_ptr -osoitin 1(uusi lisäys(Neljä viisi,55,30));

kustannus<<'Summan tulos ensimmäisen osoittimen avulla:'<Tulos() <<'' n'';
//Ilmoita toinen osoitin
ainutlaatuinen_ptr -osoitin2;
//Siirrä ensimmäinen osoitin toiseen osoittimeen
osoitin2 = liikkua(osoitin 1);

kustannus<<'Summan tulos toisen osoittimen avulla:'<Tulos() <<'' n'';
palautus0;
}

Lähtö:

Seuraava tulos tulee näkyviin yllä olevan koodin suorittamisen jälkeen. Summat 45, 55 ja 30 ovat 130, jotka on painettu molemmille osoittimille.

Esimerkki 2: Luo luokan osoitinobjekti konstruktorin ja tuhoajan avulla

Seuraavassa esimerkissä on esitetty tapa julistaa luokan ainutlaatuinen osoitinobjekti konstruktorin ja tuhoajan kanssa. Luokka sisältää konstruktorin, jossa on yksi argumentti, julkinen menetelmä nimeltä Display () luokkamuuttujan arvoon ja tuhoaja, joka tulostaa tuhoamisviestin ennen luokan objektin tuhoamista. Näyttö () -menetelmää kutsutaan sen jälkeen, kun koodi on luonut ainutlaatuisen osoitinobjektin.

//Sisällytä tarvittavat kirjastot

#sisältää

#sisältää

usingnamespace std;

//Määrittele luokka
luokan Asiakas
{
merkkijonon nimi;

julkinen:
//Ilmoita rakentaja
Asiakas(merkkijono n)
{
nimi = n;
kustannus<<'Resurssi on varattu. n'';
}

//Ilmoita tapa tulostaa asiakkaan nimi
tyhjä näyttö()
{
kustannus<<'Asiakkaan nimi on:'<<nimi<<'' n'';
}

//Ilmoita tuhoaja
~ Asiakas()
{
kustannus<<'Resurssi tuhoutuu. n'';
}
};
int pää()
{
//Varaa resurssi -objekti, jonka omistaa yksilöllinen_ptr
unique_ptruPointer{uusi asiakas('Mir Abbas') };
uOsoitin->Näyttö();
palautus0;
}

Lähtö:

Seuraava tulos tulee näkyviin yllä olevan koodin suorittamisen jälkeen:

Esimerkki 3: Tarkista osoitin omistajuuden siirron jälkeen

Tapa tarkistaa ainutlaatuisen osoittimen omistusoikeus on esitetty seuraavassa esimerkissä luomalla luokan kaksi yksilöllistä osoitinta. Koodissa on ilmoitettu luokka, jossa on kaksi merkkijonomuuttujaa ja julkinen menetelmä. Luokan Book_details () -menetelmä kutsutaan luokan ensimmäisen ainutlaatuisen osoitinobjektin luomisen jälkeen. Seuraavaksi on luotu toinen ainutlaatuinen osoitinobjekti ja ensimmäinen osoitin on siirretty toiseen osoittimeen, joka tuhoaa ensimmäisen osoittimen. Molempien osoittimien omistajuus tulee tarkistaa myöhemmin.

//Sisällytä tarvittavat kirjastot

#sisältää

#sisältää

usingnamespace std;

//Määrittele luokka
luokan Kirja{

merkkijonon otsikko ='C ++ -ohjelmointikieli';
merkkijonon kirjoittaja ='Bjarne Stroustrup';

julkinen:
//Ilmoita tapa tulostaa kirjan tiedot
voidBook_details()
{
kustannus<<'Kirjan nimi:'<<otsikko<<'' n'';
kustannus<<'Kirjoittajan nimi:'<<kirjoittaja<<'' n'';
}
};
int pää()
{
//Ilmoita ensimmäinen osoitin
yksilöllinen_ptr -osoitin 1(uusi kirja());

osoitin1->Kirja_tiedot();
//Ilmoita toinen osoitin
yksilöllinen_ptr -osoitin2;
//Siirrä ensimmäinen osoitin toiseen osoittimeen
osoitin2 = liikkua(osoitin 1);

//Tarkista ensimmäinen osoitin
jos (static_cast(osoitin 1))kustannus<<'Ensimmäinen osoitin ei ole nolla n'';
muuten<<'Ensimmäinen osoitin on nolla n'';
//Tarkista toinen osoitin
jos (static_cast(osoitin2))kustannus<<'Toinen osoitin ei ole nolla n'';
muuten<<'Toinen osoitin on nolla n'';

palautus0;
}

Lähtö:

Seuraava tulos tulee näkyviin yllä olevan koodin suorittamisen jälkeen. Tuloksen mukaan ensimmäisen osoittimen omistajuus poistettiin ja viesti, Ensimmäinen osoitin on nolla on tulostanut ensimmäistä osoitinta varten. Toisen osoittimen omistusoikeus on olemassa, ja viesti Ensimmäinen osoitin ei ole nolla on tulostanut toista osoitinta varten:

Johtopäätös:

Ainutlaatuisen osoittimen käytön tarkoitukset C ++ -ohjelmoinnissa on kuvattu tässä opetusohjelmassa käyttämällä useita esimerkkejä. Tässä on selitetty tapoja luoda ainutlaatuinen osoitin, siirtää osoittimen omistajuus ja tarkistaa osoittimen nykyinen omistus, jotta lukijat voivat tietää ainutlaatuisen osoittimen käytön oikein.