Gebruik van C++ unique_ptr

Use C Unique_ptr



De slimme aanwijzers worden gebruikt om de bron dynamisch toe te wijzen. Veel soorten slimme aanwijzers worden in C++ voor verschillende doeleinden gebruikt, zoals: auto_ptr , unique_ptr , en shared_ptr . De auto_ptr-aanwijzer is verouderd in de nieuwe versie van C++. De unique_ptr wordt gebruikt ter vervanging van de auto_ptr. Het object van deze aanwijzer kan eigenaar worden van de aanwijzer. Het object van deze aanwijzer is de unieke eigenaar van de aanwijzer en geen enkele andere aanwijzer kan naar het object wijzen. De unique_ptr verwijdert de objecten automatisch. Deze aanwijzer beheert die objecten als de objecten worden vernietigd, of de waarde van het object wordt gewijzigd of de functie reset() wordt aangeroepen. De kenmerken van de unique_ptr en het gebruik van deze aanwijzer worden in deze zelfstudie besproken.

Belangrijke onderdelen:







Hieronder vindt u twee hoofdcomponenten van het object unique_ptr:



A. Opgeslagen aanwijzer:



Het wordt gebruikt om de objecten te beheren die door een unieke aanwijzer zijn gemaakt. Het wordt gemaakt op het moment dat de aanwijzer wordt gemaakt en kan op verschillende manieren worden gewijzigd.





B. Opgeslagen verwijderaar:

Het neemt het argument van het opgeslagen aanwijzertype dat wordt gebruikt om het beheerde object te verwijderen. Het wordt ook gemaakt op het moment dat de aanwijzer wordt gemaakt en kan op verschillende manieren worden gewijzigd.



Voorbeeld 1: Maak een aanwijzerobject van een klasse met Constructor

De manier om de unieke pointer-objecten van een klasse te declareren en toegang te krijgen tot de methode van de klasse, is door de objecten te gebruiken zoals weergegeven in het volgende voorbeeld. Een klasse met een constructor en een openbare methode is gedeclareerd in de code. De constructor heeft drie argumenten. De eerste unieke pointer is gemaakt door de constructor aan te roepen met drie argumentwaarden. De Resultaat() methode wordt aangeroepen door het pointer-object dat de som van drie argumentwaarden van de constructor berekent. Vervolgens wordt het tweede unieke aanwijzerobject gemaakt zonder de constructor aan te roepen, en wordt de eerste aanwijzer naar de tweede aanwijzer verplaatst. De Resultaat() methode wordt aangeroepen door het tweede pointer-object.

//Benodigde bibliotheken opnemen

#erbij betrekken

#erbij betrekken

namespace std; gebruiken;

//Definieer de klasse
klasse Toevoeging{

int nummer1, nummer2, nummer3;
openbaar:
//De constructor declareren
Toevoeging(int a, int b, int c)
{
getal1 = een;
getal2 = b;
getal3 = c;
}
//Declareer methode om de . te berekenensom
int Resultaat()
{
opbrengstnummer1 + nummer2 + nummer3;
}
};
int hoofd()
{
//Declareer de eerste pointer
unique_ptr pointer1(nieuwe toevoeging(Vier vijf,55,30));

kosten<<'Het resultaat van de som met behulp van de eerste aanwijzer:'<Resultaat() <<'N';
//Declareer de tweede aanwijzer
unique_ptr pointer2;
//Verplaats de eerste aanwijzer naar de tweede aanwijzer
pointer2 = verplaatsen(wijzer1);

kosten<<'Het resultaat van de som met behulp van de tweede aanwijzer:'<Resultaat() <<'N';
retour0;
}

Uitgang:

De volgende uitvoer verschijnt na het uitvoeren van de bovenstaande code. De som van 45, 55 en 30 is 130 die voor beide wijzers is afgedrukt.

Voorbeeld 2: Maak een aanwijzerobject van een klasse met Constructor en Destructor

De manier om een ​​uniek pointer-object van een klasse te declareren met constructor en destructor is in het volgende voorbeeld getoond. De klasse bevat een constructor met één argument, een openbare methode met de naam Display() voor de waarde van de klassevariabele, en een destructor die een vernietigingsbericht zal afdrukken voordat het object van de klasse wordt vernietigd. De methode Display() wordt aangeroepen nadat het unieke pointer-object in de code is gemaakt.

//Benodigde bibliotheken opnemen

#erbij betrekken

#erbij betrekken

namespace std; gebruiken;

//Definieer de klasse
klasse klant
{
tekenreeksnaam;

openbaar:
//De constructor declareren
Klant(tekenreeks nr)
{
naam = n;
kosten<<'De middelen zijn toegewezen.N';
}

//Declareer methode om de naam van de klant af te drukken
ongeldige weergave()
{
kosten<<'De naam van de klant is: '<<naam<<'N';
}

//Verklaar de destructor
~Klant()
{
kosten<<'De bron is vernietigd.N';
}
};
int hoofd()
{
//Wijs het Resource-object toe dat eigendom is van de unique_ptr
unique_ptruPointer{nieuwe klant('Mir Abbas') };
uwijzer->Weergave();
retour0;
}

Uitgang:

De volgende uitvoer verschijnt na het uitvoeren van de bovenstaande code:

Voorbeeld 3: Controleer de aanwijzer na de eigendomsoverdracht

De manier om het eigendom van de unieke aanwijzer te controleren, wordt in het volgende voorbeeld getoond door twee unieke aanwijzers van een klasse te maken. Een klasse met twee stringvariabelen en een openbare methode is gedeclareerd in de code. De methode Book_details() van de klasse wordt aangeroepen nadat het eerste unieke pointer-object van de klasse is gemaakt. Vervolgens is het tweede unieke aanwijzerobject gemaakt en is de eerste aanwijzer verplaatst naar de tweede aanwijzer die de eerste aanwijzer vernietigt. Het eigendom van beide wijzers moet later worden gecontroleerd.

//Benodigde bibliotheken opnemen

#erbij betrekken

#erbij betrekken

namespace std; gebruiken;

//Definieer de klasse
klasse Boek{

string titel ='De C++ programmeertaal';
tekenreeks auteur ='Bjarne Stroustrup';

openbaar:
//Declareer methode om boekdetails af te drukken
voidBook_details()
{
kosten<<'Boeknaam:'<<titel<<'N';
kosten<<'Auteur naam: '<<auteur<<'N';
}
};
int hoofd()
{
//Declareer de eerste pointer
unique_ptr pointer1(nieuw boek());

aanwijzer1->Boek_details();
//Declareer de tweede aanwijzer
unique_ptr pointer2;
//Verplaats de eerste aanwijzer naar de tweede aanwijzer
pointer2 = verplaatsen(wijzer1);

//Controleer de eerste aanwijzer
indien (static_cast(wijzer1))kosten<<'De eerste aanwijzer is niet nul'N';
anders zoeken<<'De eerste aanwijzer is nul'N';
//Controleer de tweede aanwijzer
indien (static_cast(aanwijzer2))kosten<<'De tweede wijzer is niet nul'N';
anders zoeken<<'De tweede wijzer is nul'N';

retour0;
}

Uitgang:

De volgende uitvoer verschijnt na het uitvoeren van de bovenstaande code. Volgens de uitvoer werd het eigendom van de eerste aanwijzer verwijderd en het bericht, De eerste aanwijzer is null heeft afgedrukt voor de eerste aanwijzer. Het eigendom van de tweede aanwijzer bestaat, en het bericht, De eerste aanwijzer is niet null heeft afgedrukt voor de tweede aanwijzer:

Conclusie:

De doeleinden van het gebruik van een unieke aanwijzer in C++-programmering zijn in deze zelfstudie beschreven aan de hand van meerdere voorbeelden. De manieren om een ​​unieke aanwijzer te maken, het eigendom van de aanwijzer over te dragen en het huidige eigendom van de aanwijzer te controleren, zijn hier uitgelegd om de lezers te helpen het gebruik van de unieke aanwijzer goed te kennen.