Användning av C ++ unique_ptr

Use C Unique_ptr



De smarta pekarna används för att fördela resursen dynamiskt. Många typer av smarta pekare används i C ++ för olika ändamål, t.ex. auto_ptr , unik_ptr , och shared_ptr . Auto_ptr -pekaren har utfasats i den nya versionen av C ++. Den unika_ptr används för att ersätta auto_ptr. Objektet med denna pekare kan ta äganderätten till pekaren. Objektet för denna pekare äger pekaren unikt, och ingen annan pekare kan peka på objektet. Unik_ptr raderar objekten automatiskt. Denna pekare hanterar dessa objekt om objekten förstörs, eller objektets värde ändras eller funktionen reset () anropas. Funktionerna i unique_ptr och användningen av denna pekare diskuteras i denna handledning.

Huvudkomponenter:







Två huvudkomponenter i objektet unique_ptr finns nedan:



A. Lagrad pekare:



Det används för att hantera objekt som skapats av en unik pekare. Det skapas när pekaren skapas, och det kan ändras på olika sätt.





B.Lagrad raderare:

Det tar argumentet för den lagrade pekartypen som används för att ta bort det hanterade objektet. Det skapas också när pekaren skapas, och det kan ändras på olika sätt.



Exempel 1: Skapa ett pekarobjekt i en klass med Constructor

Sättet att deklarera de unika pekarobjekten i en klass och få tillgång till klassens metod är genom att använda objekten som visas i följande exempel. En klass med en konstruktör och en offentlig metod har deklarerats i koden. Konstruktören har tre argument. Den första unika pekaren har skapats genom att anropa konstruktören med tre argumentvärden. De Resultat() metod kallas av pekarobjektet som beräknar summan av tre argumentvärden för konstruktorn. Därefter skapas det andra unika pekarobjektet utan att anropa konstruktören, och den första pekaren flyttas till den andra pekaren. De Resultat() metoden kallas av det andra pekarobjektet.

//Inkludera nödvändiga bibliotek

#omfatta

#omfatta

usingnamespace std;

//Definiera klassen
klass Tillägg{

int nummer1, nummer2, nummer3;
offentlig:
//Förklara konstruktören
Tillägg(int a, int b, int c)
{
nummer1 = a;
nummer2 = b;
nummer3 = c;
}
//Deklarera metod för att beräknabelopp
int Resultat()
{
lämna tillbakanummer1 + tal2 + tal3;
}
};
int main()
{
//Förklara den första pekaren
unik_ptr pekare1(nytt tillägg(Fyra fem,55,30));

kosta<<'Resultatet av summan med den första pekaren:'<Resultat() <<' n';
//Förklara den andra pekaren
unik_ptr pekare2;
//Flytta den första pekaren till den andra pekaren
pekare2 = flytta(pekare1);

kosta<<'Resultatet av summan med den andra pekaren:'<Resultat() <<' n';
return0;
}

Produktion:

Följande utdata visas efter att koden ovan har körts. Summan av 45, 55 och 30 är 130 som har skrivits ut för båda pekarna.

Exempel 2: Skapa ett pekarobjekt i en klass med Constructor och Destructor

Sättet att deklarera ett unikt pekarobjekt för en klass med konstruktör och destruktor har visats i följande exempel. Klassen innehåller en konstruktör med ett argument, en offentlig metod som heter Display () till klassvariabelns värde och en destruktor som kommer att skriva ut ett förstöringsmeddelande innan objektets klass förstörs. Display () -metoden kallas efter att det unika pekarobjektet har skapats i koden.

//Inkludera nödvändiga bibliotek

#omfatta

#omfatta

usingnamespace std;

//Definiera klassen
klass Kund
{
strängnamn;

offentlig:
//Förklara konstruktören
Kund(sträng n)
{
namn = n;
kosta<<'Resursen är allokerad. n';
}

//Deklarera metod för att skriva ut kundnamnet
void Display()
{
kosta<<'Kundens namn är:'<<namn<<' n';
}

//Förklara destruktorn
~ Kund()
{
kosta<<'Resursen förstörs. n';
}
};
int main()
{
//Tilldela resursobjektet som ägs av unique_ptr
unique_ptruPointer{ny kund('Mir Abbas') };
uPointer->Visa();
return0;
}

Produktion:

Följande utdata visas efter att koden ovan har körts:

Exempel 3: Kontrollera pekaren efter överföring av äganderätten

Sättet att kontrollera äganderätten till den unika pekaren har visats i följande exempel genom att skapa två unika pekare i en klass. En klass med två strängvariabler och en offentlig metod har deklarerats i koden. Klassen Book_details () -metod kallas efter att ha skapat klassens första unika pekarobjekt. Därefter har det andra unika pekarobjektet skapats och den första pekaren har flyttats till den andra pekaren som förstör den första pekaren. Ägandet av båda pekarna bör kontrolleras senare.

//Inkludera nödvändiga bibliotek

#omfatta

#omfatta

usingnamespace std;

//Definiera klassen
klassbok{

strängtitel ='C ++ programmeringsspråk';
strängförfattare ='Bjarne Stroustrup';

offentlig:
//Deklarera metod för att skriva ut bokdetaljer
voidBook_details()
{
kosta<<'Boknamn:'<<titel<<' n';
kosta<<'Författarens namn: '<<författare<<' n';
}
};
int main()
{
//Förklara den första pekaren
unik_ptr pekare1(ny bok());

pekare1->Bok_detaljer();
//Förklara den andra pekaren
unik_ptr pekare2;
//Flytta den första pekaren till den andra pekaren
pekare2 = flytta(pekare1);

//Kontrollera den första pekaren
om (static_cast(pekare1))kosta<<'Den första poinern är inte null n';
elsecout<<'Den första pointern är noll n';
//Kontrollera den andra pekaren
om (static_cast(pekare2))kosta<<'Den andra poinern är inte null n';
elsecout<<'Den andra pointern är noll n';

return0;
}

Produktion:

Följande utdata visas efter att koden ovan har körts. Enligt utdata togs äganderätten till den första pekaren bort och meddelandet, Den första pekaren är noll har skrivit ut för den första pekaren. Äganderätten till den andra pekaren finns, och meddelandet, Den första pekaren är inte null har skrivit ut för den andra pekaren:

Slutsats:

Syftet med att använda en unik pekare i C ++ - programmering har beskrivits i denna handledning med hjälp av flera exempel. Sätten att skapa en unik pekare, överföra ägaren till pekaren och kontrollera den nuvarande äganderätten till pekaren har förklarats här för att hjälpa läsarna att känna till användningen av den unika pekaren korrekt.