Uso de C ++ unique_ptr

Use C Unique_ptr



Los punteros inteligentes se utilizan para asignar el recurso de forma dinámica. En C ++ se utilizan muchos tipos de punteros inteligentes para diversos fines, como auto_ptr , unique_ptr , y shared_ptr . El puntero auto_ptr está obsoleto en la nueva versión de C ++. Unique_ptr se usa en reemplazo de auto_ptr. El objeto de este puntero puede tomar posesión del puntero. El objeto de este puntero es el propietario exclusivo del puntero y ningún otro puntero puede apuntar al objeto. Unique_ptr elimina los objetos automáticamente. Este puntero administra esos objetos si los objetos se destruyen, el valor del objeto se cambia o se llama a la función reset (). Las características de unique_ptr y los usos de este puntero se analizan en este tutorial.

Componentes mayores:







A continuación, se proporcionan dos componentes principales del objeto unique_ptr:



A. Puntero almacenado:



Se utiliza para administrar los objetos creados por un puntero único. Se crea en el momento de la creación del puntero y se puede cambiar de diferentes formas.





B. Eliminador almacenado:

Toma el argumento del tipo de puntero almacenado que se utiliza para suprimir el objeto gestionado. También se crea en el momento de la creación del puntero y se puede cambiar de diferentes formas.



Ejemplo 1: crear un objeto puntero de una clase con constructor

La forma de declarar los objetos punteros únicos de una clase y acceder al método de la clase es utilizando los objetos como se muestra en el siguiente ejemplo. Se ha declarado en el código una clase con un constructor y un método público. El constructor tiene tres argumentos. El primer puntero único se ha creado llamando al constructor con tres valores de argumento. los Resultado() El objeto puntero llama al método que calcula la suma de tres valores de argumento del constructor. A continuación, se crea el segundo objeto puntero único sin llamar al constructor y el primer puntero se mueve al segundo puntero. los Resultado() El segundo objeto puntero llama al método.

//Incluya las bibliotecas necesarias

#incluir

#incluir

usingnamespace std;

//Definir la clase
adición de clase{

int número1, número2, número3;
público:
//Declarar el constructor
Adición(int a, int b, int c)
{
número1 = a;
número2 = b;
número3 = c;
}
//Método de declaración para calcular elsuma
int Resultado()
{
regresonúmero1 + número2 + número3;
}
};
int main()
{
//Declare el primer puntero
puntero1 único_ptr(nueva adquisición(45,55,30));

costo<<'El resultado de la suma usando el primer puntero:'<Resultado() <<' orte';
//Declare el segundo puntero
unique_ptr pointer2;
//Mueva el primer puntero al segundo puntero
pointer2 = mover(pointer1);

costo<<'El resultado de la suma usando el segundo puntero:'<Resultado() <<' orte';
return0;
}

Producción:

La siguiente salida aparecerá después de ejecutar el código anterior. La suma de 45, 55 y 30 es 130 que se ha impreso para ambos punteros.

Ejemplo 2: crear un objeto puntero de una clase con constructor y destructor

En el siguiente ejemplo se muestra la forma de declarar un objeto puntero único de una clase con constructor y destructor. La clase contiene un constructor con un argumento, un método público llamado Display () para el valor de la variable de clase y un destructor que imprimirá un mensaje de destrucción antes de destruir el objeto de la clase. El método Display () se llama después de crear el objeto puntero único en el código.

//Incluya las bibliotecas necesarias

#incluir

#incluir

usingnamespace std;

//Definir la clase
clase cliente
{
nombre de cadena;

público:
//Declarar el constructor
Cliente(cadena n)
{
nombre = n;
costo<<'El recurso está asignado. orte';
}

//Declarar método para imprimir el nombre del cliente
pantalla vacía()
{
costo<<'El nombre del cliente es:'<<nombre<<' orte';
}

//Declara el destructor
~ Cliente()
{
costo<<'El recurso está destruido. orte';
}
};
int main()
{
//Asignar el objeto de recurso que es propiedad de unique_ptr
puntero_ptru_unico{nuevo cliente('Mir Abbas') };
uPointer->Monitor();
return0;
}

Producción:

La siguiente salida aparecerá después de ejecutar el código anterior:

Ejemplo 3: comprobar el puntero después de transferir la propiedad

La forma de comprobar la propiedad del puntero único se muestra en el siguiente ejemplo mediante la creación de dos punteros únicos de una clase. Se ha declarado en el código una clase con dos variables de cadena y un método público. El método Book_details () de la clase se llama después de crear el primer objeto puntero único de la clase. A continuación, se ha creado el segundo objeto puntero único y el primer puntero se ha movido al segundo puntero que destruye el primer puntero. La propiedad de ambos punteros debe comprobarse más tarde.

//Incluya las bibliotecas necesarias

#incluir

#incluir

usingnamespace std;

//Definir la clase
Libro de clase{

título de cadena ='El lenguaje de programación C ++';
autor de cadena ='Bjarne Stroustrup';

público:
//Método de declaración para imprimir los detalles del libro
voidBook_details()
{
costo<<'Nombre del libro: '<<título<<' orte';
costo<<'Nombre del autor: '<<autor<<' orte';
}
};
int main()
{
//Declare el primer puntero
puntero1 único_ptr(Nuevo libro());

pointer1->Detalles del libro();
//Declare el segundo puntero
unique_ptr pointer2;
//Mueva el primer puntero al segundo puntero
pointer2 = mover(pointer1);

//Revisa el primer puntero
si (static_cast(pointer1))costo<<'El primer puntero no es nulo orte';
elsecout<<'El primer puntero es nulo orte';
//Verifique el segundo puntero
si (static_cast(pointer2))costo<<'El segundo puntero no es nulo orte';
elsecout<<'El segundo puntero es nulo orte';

return0;
}

Producción:

La siguiente salida aparecerá después de ejecutar el código anterior. Según el resultado, se eliminó la propiedad del primer puntero y el mensaje, El primer puntero es nulo ha impreso para el primer puntero. Existe la propiedad del segundo puntero, y el mensaje, El primer puntero no es nulo ha impreso para el segundo puntero:

Conclusión:

Los propósitos de usar un puntero único en la programación C ++ se han descrito en este tutorial usando múltiples ejemplos. Aquí se explican las formas de crear un puntero único, transferir la propiedad del puntero y verificar la propiedad actual del puntero para ayudar a los lectores a conocer el uso del puntero único correctamente.