Ús de C ++ unique_ptr

Use C Unique_ptr



Els indicadors intel·ligents s’utilitzen per assignar el recurs de forma dinàmica. A C ++ s'utilitzen molts tipus de punteres intel·ligents per a diversos propòsits, com ara auto_ptr , unique_ptr , i compartit_ptr . El punter auto_ptr està obsolet a la nova versió de C ++. El fitxer unique_ptr s'utilitza per substituir el fitxer auto_ptr. L'objecte d'aquest punter pot fer-se propietari del punter. L'objecte d'aquest punter és propietari del punter de manera única i cap altre punter pot assenyalar-lo. El fitxer unique_ptr elimina els objectes automàticament. Aquest punter gestiona aquests objectes si es destrueixen els objectes, o es canvia el valor de l'objecte o es crida la funció reset (). Les característiques de unique_ptr i els usos d’aquest punter es discuteixen en aquest tutorial.

Components principals:







A continuació es proporcionen dos components principals de l’objecte unique_ptr:



A. Punter emmagatzemat:



S'utilitza per gestionar els objectes creats per un punter únic. Es crea en el moment de la creació del punter i es pot canviar de diferents maneres.





B. Deleter emmagatzemat:

Pren l'argument del tipus de punter emmagatzemat que s'utilitza per suprimir l'objecte gestionat. També es crea en el moment de la creació del punter i es pot canviar de diferents maneres.



Exemple 1: Creeu un objecte punter d'una classe amb Constructor

La manera de declarar els objectes únics de punter d’una classe i accedir al mètode de la classe és mitjançant els objectes tal com es mostra a l’exemple següent. Al codi s’ha declarat una classe amb un constructor i un mètode públic. El constructor té tres arguments. El primer punter únic s'ha creat cridant el constructor amb tres valors d'argument. El Resultat () mètode és anomenat per l'objecte punter que calcula la suma de tres valors d'argument del constructor. A continuació, es crea el segon objecte punter únic sense trucar al constructor i el primer punter es mou al segon punter. El Resultat () mètode és anomenat pel segon objecte punter.

//Incloeu les biblioteques necessàries

#incloure

#incloure

usingnamespace std;

//Definiu la classe
addició de classe{

int número1, número2, número3;
públic:
//Declareu el constructor
Addició(int a, int b, int c)
{
número1 = a;
número2 = b;
número3 = c;
}
//Declareu el mètode per calcular elsuma
int Resultat()
{
tornarnúmero1 + número2 + número3;
}
};
int main()
{
//Declareu el primer punter
punter_ptr_unic_1(nova addició(45,55,30));

cost<<'El resultat de la suma mitjançant el primer punter:'<Resultat() <<' n';
//Declareu el segon punter
punter2_ptr únic2;
//Moveu el primer punter al segon punter
punter2 = moure(punter1);

cost<<'El resultat de la suma mitjançant el segon punter:'<Resultat() <<' n';
retorn0;
}

Sortida:

La sortida següent apareixerà després d'executar el codi anterior. La suma de 45, 55 i 30 és de 130 que s’ha imprès per a ambdós indicadors.

Exemple 2: Creeu un objecte punter d'una classe amb Constructor i Destructor

La manera de declarar un objecte punter únic d'una classe amb constructor i destructor s'ha mostrat a l'exemple següent. La classe conté un constructor amb un argument, un mètode públic anomenat Display () al valor de la variable de classe i un destructor que imprimirà un missatge de destrucció abans de destruir l'objecte de la classe. El mètode Display () es diu després de crear l'objecte punter únic al codi.

//Incloeu les biblioteques necessàries

#incloure

#incloure

usingnamespace std;

//Definiu la classe
Cliente de classe
{
nom de la cadena;

públic:
//Declareu el constructor
Client(cadena n)
{
nom = n;
cost<<'El recurs està assignat. n';
}

//Declareu el mètode per imprimir el nom del client
pantalla buida()
{
cost<<'El nom del client és:'<<nom<<' n';
}

//Declareu el destructor
~ Client()
{
cost<<'El recurs està destruït. n';
}
};
int main()
{
//Assigneu l'objecte de recurs que és propietat de unique_ptr
unique_ptruPointer{nou client('Mir Abbas') };
uPointer->Visualització();
retorn0;
}

Sortida:

La següent sortida apareixerà després d'executar el codi anterior:

Exemple 3: comproveu el punter després de transferir la propietat

La manera de comprovar la propietat del punter únic s'ha mostrat a l'exemple següent mitjançant la creació de dos punteres únics d'una classe. Al codi s’ha declarat una classe amb dues variables de cadena i un mètode públic. El mètode Book_details () de la classe es diu després de crear el primer objecte punter únic de la classe. A continuació, s'ha creat el segon objecte punter únic i el primer punter s'ha mogut al segon punter que destrueix el primer punter. La propietat dels dos indicadors s’hauria de comprovar més endavant.

//Incloeu les biblioteques necessàries

#incloure

#incloure

usingnamespace std;

//Definiu la classe
classe Llibre{

string title ='El llenguatge de programació C ++';
autor de cadena ='Bjarne Stroustrup';

públic:
//Declareu el mètode per imprimir els detalls del llibre
voidBook_details()
{
cost<<'Nom del llibre:'<<títol<<' n';
cost<<'Nom de l'autor:'<<autor<<' n';
}
};
int main()
{
//Declareu el primer punter
punter_ptr_unic_1(nou llibre());

punter1->Detalls del llibre();
//Declareu el segon punter
punter2_ptr únic2;
//Moveu el primer punter al segon punter
punter2 = moure(punter1);

//Comproveu el primer punter
si (emissió_estàtica(punter1))cost<<'El primer indicador no és nul n';
elsecout<<'El primer indicador és nul n';
//Comproveu el segon punter
si (emissió_estàtica(punter2))cost<<'El segon indicador no és nul n';
elsecout<<'El segon indicador és nul n';

retorn0;
}

Sortida:

La sortida següent apareixerà després d'executar el codi anterior. Segons el resultat, es va eliminar la propietat del primer punter i el missatge, El primer punter és nul ha imprès per al primer punter. La propietat del segon punter existeix i el missatge, El primer punter no és nul ha imprès per al segon punter:

Conclusió:

Els propòsits d’utilitzar un punter únic en la programació de C ++ s’han descrit en aquest tutorial mitjançant l’ús de múltiples exemples. Les formes de crear un punter únic, transferir la propietat del punter i comprovar la propietat actual del punter s’han explicat aquí per ajudar els lectors a conèixer correctament l’ús del punter únic.