C ++ unikālā_ptr izmantošana

Use C Unique_ptr



Viedie rādītāji tiek izmantoti, lai dinamiski sadalītu resursus. Daudzu veidu viedos rādītājus C ++ izmanto dažādiem mērķiem, piemēram, auto_ptr , unikāls_ptr , un shared_ptr . Rādītājs auto_ptr ir novecojis jaunajā C ++ versijā. Unikālais_ptr tiek izmantots, lai aizstātu parametru auto_ptr. Šī rādītāja objekts var iegūt rādītāja īpašumtiesības. Šī rādītāja objektam rādītājs pieder unikāli, un neviens cits rādītājs nevar norādīt uz objektu. Unikālais_ptr automātiski izdzēš objektus. Šis rādītājs pārvalda šos objektus, ja objekti tiek iznīcināti vai mainīta objekta vērtība vai tiek izsaukta funkcija reset (). Unikālā_ptr iezīmes un šī rādītāja pielietojums ir aplūkoti šajā apmācībā.

Galvenās sastāvdaļas:







Tālāk ir norādītas divas galvenās unikālā_ptr objekta sastāvdaļas:



A. Saglabātais rādītājs:



To izmanto, lai pārvaldītu objektus, ko izveidojis unikāls rādītājs. Tas tiek izveidots rādītāja izveides laikā, un to var mainīt dažādos veidos.





B. Saglabātais Deleter:

Tas aizņem saglabāto rādītāju tipa argumentu, kas tiek izmantots pārvaldītā objekta dzēšanai. Tas tiek izveidots arī rādītāja izveides laikā, un to var mainīt dažādos veidos.



1. piemērs: izveidojiet klases rādītāja objektu ar konstruktoru

Veids, kā deklarēt klases unikālos rādītāju objektus un piekļūt klases metodei, ir, izmantojot objektus, kā parādīts nākamajā piemērā. Kodeksā ir deklarēta klase ar konstruktoru un publisku metodi. Konstruktorim ir trīs argumenti. Pirmais unikālais rādītājs ir izveidots, izsaucot konstruktoru ar trim argumentu vērtībām. The Rezultāts () metodi izsauc rādītāja objekts, kas aprēķina konstruktora trīs argumentu vērtību summu. Tālāk tiek izveidots otrais unikālais rādītāja objekts, neizsaucot konstruktoru, un pirmais rādītājs tiek pārvietots uz otro rādītāju. The Rezultāts () metodi izsauc otrais rādītāja objekts.

//Iekļaujiet nepieciešamās bibliotēkas

#iekļaut

#iekļaut

usingnamespace std;

//Definējiet klasi
klases papildinājums{

int numurs1, skaitlis2, skaitlis3;
publiski:
//Deklarējiet konstruktoru
Papildinājums(int a, int b, int c)
{
skaitlis1 = a;
skaitlis2 = b;
skaitlis3 = c;
}
//Deklarējiet metodi, kā aprēķinātsumma
int Rezultāts()
{
atgrieztiesskaitlis1 + skaitlis2 + skaitlis3;
}
};
int galvenais()
{
//Deklarējiet pirmo rādītāju
unikālais_ptr rādītājs1(jauns papildinājums(Četri, pieci,55,30));

izmaksas<<'Summas rezultāts, izmantojot pirmo rādītāju:'<Rezultāts() <<' n';
//Deklarējiet otro rādītāju
unikāls_ptr rādītājs2;
//Pārvietojiet pirmo rādītāju uz otro rādītāju
rādītājs2 = kustība(rādītājs1);

izmaksas<<'Summas rezultāts, izmantojot otro rādītāju:'<Rezultāts() <<' n';
atgriešanās0;
}

Izeja:

Pēc iepriekš minētā koda izpildes parādīsies šāda izvade. Summa 45, 55 un 30 ir 130, kas iespiesta abiem rādītājiem.

2. piemērs: izveidojiet klases rādītāja objektu ar konstruktoru un iznīcinātāju

Nākamajā piemērā ir parādīts veids, kā deklarēt klases unikālu rādītāja objektu ar konstruktoru un iznīcinātāju. Klase satur konstruktoru ar vienu argumentu, publisku metodi ar nosaukumu Display () uz klases mainīgā vērtību un destruktoru, kas pirms klases objekta iznīcināšanas izdrukās iznīcināšanas ziņojumu. Displeja () metode tiek izsaukta pēc unikālā rādītāja objekta izveides kodā.

//Iekļaujiet nepieciešamās bibliotēkas

#iekļaut

#iekļaut

usingnamespace std;

//Definējiet klasi
klases Klients
{
virknes nosaukums;

publiski:
//Deklarējiet konstruktoru
Klients(virkne n)
{
nosaukums = n;
izmaksas<<'Resurss ir piešķirts. n';
}

//Deklarējiet klienta vārda drukāšanas metodi
anulēts displejs()
{
izmaksas<<'Klienta vārds ir:'<<vārds<<' n';
}

//Pasludiniet iznīcinātāju
~ Klients()
{
izmaksas<<'Resurss tiek iznīcināts. n';
}
};
int galvenais()
{
//Piešķiriet resursa objektu, kas pieder Unique_ptr
unique_ptruPointer{jauns klients('Mir Abbas') };
uPointer->Displejs();
atgriešanās0;
}

Izeja:

Pēc iepriekš minētā koda izpildes parādīsies šāda izvade:

3. piemērs. Pārbaudiet rādītāju pēc īpašumtiesību nodošanas

Veids, kā pārbaudīt unikālā rādītāja īpašumtiesības, ir parādīts nākamajā piemērā, izveidojot divus unikālus klases rādītājus. Kodā ir deklarēta klase ar diviem virkņu mainīgajiem un publisku metodi. Klases metode Book_details () tiek izsaukta pēc klases pirmā unikālā rādītāja objekta izveidošanas. Tālāk ir izveidots otrais unikālais rādītāja objekts, un pirmais rādītājs ir pārvietots uz otro rādītāju, kas iznīcina pirmo rādītāju. Abu rādītāju īpašumtiesības jāpārbauda vēlāk.

//Iekļaujiet nepieciešamās bibliotēkas

#iekļaut

#iekļaut

usingnamespace std;

//Definējiet klasi
klases Grāmata{

virknes nosaukums ='C ++ programmēšanas valoda';
virknes autors ='Bjarne Stroustrup';

publiski:
//Deklarējiet grāmatu detaļu drukāšanas metodi
voidBook_details()
{
izmaksas<<'Grāmatas nosaukums:'<<titulu<<' n';
izmaksas<<'Autora vārds:'<<autors<<' n';
}
};
int galvenais()
{
//Deklarējiet pirmo rādītāju
unikālais_ptr rādītājs1(jauna Grāmata());

rādītājs1->Book_details();
//Deklarējiet otro rādītāju
unikāls_ptr rādītājs2;
//Pārvietojiet pirmo rādītāju uz otro rādītāju
rādītājs2 = kustība(rādītājs1);

//Pārbaudiet pirmo rādītāju
ja (static_cast(rādītājs1))izmaksas<<'Pirmais rādītājs nav nulle n';
savādāk<<'Pirmais rādītājs ir nulle n';
//Pārbaudiet otro rādītāju
ja (static_cast(rādītājs2))izmaksas<<'Otrais rādītājs nav nulle n';
savādāk<<'Otrais rādītājs ir nulle n';

atgriešanās0;
}

Izeja:

Pēc iepriekš minētā koda izpildes parādīsies šāda izvade. Saskaņā ar iznākumu pirmā rādītāja īpašumtiesības tika noņemtas, un ziņojums Pirmais rādītājs ir nulle ir izdrukājis pirmajam rādītājam. Otrā rādītāja īpašumtiesības pastāv un ziņojums Pirmais rādītājs nav nulle ir iespiedis otrajam rādītājam:

Secinājums:

Unikālā rādītāja izmantošanas mērķi C ++ programmēšanā ir aprakstīti šajā apmācībā, izmantojot vairākus piemērus. Šeit ir izskaidroti veidi, kā izveidot unikālu rādītāju, nodot rādītāja īpašumtiesības un pārbaudīt rādītāja pašreizējās īpašumtiesības, lai palīdzētu lasītājiem pareizi zināt unikālā rādītāja izmantošanu.