C ++ unikalus_ptr naudojimas

Use C Unique_ptr



Išmaniosios rodyklės naudojamos dinamiškai paskirstyti išteklius. Daugybė išmaniųjų rodyklių tipų yra naudojami C ++ įvairiais tikslais, pvz auto_ptr , unikalus_ptr , ir shared_ptr . Naujojoje „C ++“ versijoje rodyklė „auto_ptr“ nebenaudojama. „Unique_ptr“ naudojamas pakeičiant „auto_ptr“. Šio žymeklio objektas gali perimti žymeklio nuosavybę. Šio žymeklio objektui žymeklis priklauso unikaliai, ir joks kitas žymeklis negali nukreipti į objektą. Unikalus_ptr automatiškai ištrina objektus. Šis žymeklis valdo tuos objektus, jei objektai yra sunaikinti arba pakeista objekto vertė arba iškviečiama atstatymo () funkcija. Šioje pamokoje aptariamos unikalios_ptr ypatybės ir šio žymeklio naudojimas.

Pagrindiniai komponentai:







Toliau pateikiami du pagrindiniai objekto unikalus_ptr komponentai:



A. Saugomas žymeklis:



Jis naudojamas unikalios žymeklio sukurtiems objektams valdyti. Jis sukurtas rodyklės kūrimo metu ir gali būti keičiamas įvairiais būdais.





B. Saugomas Deleter:

Tam reikia išsaugoto rodyklės tipo argumento, kuris naudojamas ištrinti valdomą objektą. Jis taip pat sukurtas rodyklės kūrimo metu ir gali būti keičiamas įvairiais būdais.



1 pavyzdys: sukurkite klasės rodyklės objektą naudodami konstruktorių

Klasės unikalių žymeklio objektų deklaravimas ir klasės metodo pasiekimas yra naudojant objektus, kaip parodyta šiame pavyzdyje. Kode yra deklaruota klasė su konstruktoriumi ir viešuoju metodu. Konstruktorius turi tris argumentus. Pirmasis unikalus žymeklis buvo sukurtas paskambinus konstruktoriui su trimis argumentų reikšmėmis. The Rezultatas() metodas vadinamas rodyklės objektu, kuris apskaičiuoja trijų konstruktoriaus argumentų reikšmių sumą. Tada antrasis unikalus rodyklės objektas sukuriamas neskambinant konstruktoriui, o pirmasis rodyklė perkeliama į antrąjį rodyklę. The Rezultatas() metodas vadinamas antruoju rodyklės objektu.

//Įtraukite būtinas bibliotekas

#įtraukti

#įtraukti

usingnamespace std;

//Apibrėžkite klasę
klasės papildymas{

int skaičius1, skaičius2, skaičius3;
viešas:
//Paskelbkite konstruktorių
Papildymas(int a, int b, int c)
{
skaičius1 = a;
skaičius2 = b;
skaičius3 = c;
}
//Paskelbkite apskaičiavimo metodąsuma
int Rezultatas()
{
grįžtiskaičius1 + skaičius2 + skaičius3;
}
};
int pagrindinis()
{
//Paskelbkite pirmąją žymeklį
unikalus_ptr rodyklė1(naujas papildymas(Keturi, penki,55,30));

kaina<<„Sumos rezultatas naudojant pirmąjį žymeklį:“<Rezultatas() <<' n';
//Paskelbkite antrąjį žymeklį
unikalus_ptr rodyklė2;
//Perkelkite pirmąjį žymiklį į antrąjį
rodyklė2 = judėjimas(rodyklė1);

kaina<<„Sumos rezultatas naudojant antrąją rodyklę:“<Rezultatas() <<' n';
grąža0;
}

Išėjimas:

Įvedus pirmiau nurodytą kodą, pasirodys ši išvestis. 45, 55 ir 30 suma yra 130, išspausdinta abiem rodyklėms.

2 pavyzdys: sukurkite klasės rodyklės objektą su konstruktoriumi ir naikintoju

Šiame pavyzdyje parodytas būdas, kaip deklaruoti unikalų klasės rodyklės objektą su konstruktoriumi ir destruktoriumi. Klasėje yra konstruktorius su vienu argumentu, viešas metodas, pavadintas „Display“ () į klasės kintamojo vertę, ir destruktorius, kuris atspausdins sunaikinimo pranešimą prieš sunaikindamas klasės objektą. Rodymo () metodas iškviečiamas sukūrus unikalų žymeklio objektą kode.

//Įtraukite būtinas bibliotekas

#įtraukti

#įtraukti

usingnamespace std;

//Apibrėžkite klasę
klasės klientas
{
eilutės pavadinimas;

viešas:
//Paskelbkite konstruktorių
Klientas(eilutė n)
{
vardas = n;
kaina<<„Ištekliai yra skirti. n';
}

//Pateikite kliento vardo spausdinimo metodą
negaliojantis ekranas()
{
kaina<<„Kliento vardas:“<<vardas<<' n';
}

//Paskelbti naikintoją
~ Klientas()
{
kaina<<„Ištekliai sunaikinti. n';
}
};
int pagrindinis()
{
//Paskirti išteklių objektą, kuris priklauso unikaliam_ptr
unikalus_ptruPointeris{naujas klientas(„Mir Abbas“) };
uPointer->Ekranas();
grąža0;
}

Išėjimas:

Įvedus pirmiau nurodytą kodą, pasirodys ši išvestis:

3 pavyzdys: Patikrinkite žymeklį po nuosavybės teisės perdavimo

Toliau pateiktame pavyzdyje parodytas būdas patikrinti unikalios žymeklio nuosavybę, sukuriant du unikalius klasės rodykles. Kode buvo nurodyta klasė su dviem eilutės kintamaisiais ir viešuoju metodu. Klasės metodas Book_details () iškviečiamas sukūrus pirmąjį unikalų klasės rodyklės objektą. Tada buvo sukurtas antrasis unikalus žymeklio objektas, o pirmasis žymeklis perkeltas į antrąjį žymeklį, kuris sunaikina pirmąjį žymeklį. Abiejų rodyklių nuosavybė turėtų būti patikrinta vėliau.

//Įtraukite būtinas bibliotekas

#įtraukti

#įtraukti

usingnamespace std;

//Apibrėžkite klasę
klasės knyga{

eilutės pavadinimas =„C ++ programavimo kalba“;
eilutės autorius =„Bjarne Stroustrup“;

viešas:
//Paskelbkite knygos detalių spausdinimo metodą
voidBook_details()
{
kaina<<'Knygos pavadinimas:'<<titulas<<' n';
kaina<<'Autoriaus vardas:'<<autorius<<' n';
}
};
int pagrindinis()
{
//Paskelbkite pirmąją žymeklį
unikalus_ptr rodyklė1(nauja Knyga());

rodyklė1->Book_details();
//Paskelbkite antrąjį žymeklį
unikalus_ptr rodyklė2;
//Perkelkite pirmąjį žymiklį į antrąjį
rodyklė2 = judėjimas(rodyklė1);

//Patikrinkite pirmąją rodyklę
jei (static_cast(rodyklė1))kaina<<„Pirmasis rodiklis nėra niekinis n';
kitaip<<„Pirmasis rodiklis yra niekinis n';
//Patikrinkite antrą rodyklę
jei (static_cast(rodyklė2))kaina<<„Antrasis rodiklis nėra niekinis n';
kitaip<<„Antrasis rodiklis yra niekinis n';

grąža0;
}

Išėjimas:

Įvedus pirmiau nurodytą kodą, pasirodys ši išvestis. Remiantis išvestimi, pirmojo žymeklio nuosavybė buvo pašalinta, o pranešimas Pirmasis žymeklis yra nulinis išspausdino pirmą rodyklę. Yra antrojo žymeklio nuosavybė ir pranešimas, Pirmasis žymeklis nėra nulinis išspausdino antrai rodyklei:

Išvada:

Unikalaus žymeklio naudojimo C ++ programavime tikslai buvo aprašyti šiame vadove, naudojant kelis pavyzdžius. Čia paaiškinti būdai, kaip sukurti unikalią rodyklę, perkelti rodyklės nuosavybės teisę ir patikrinti dabartinę žymeklio nuosavybę, kad skaitytojai galėtų tinkamai žinoti, kaip naudojamas unikalus žymeklis.