Uso de C ++ unique_ptr

Uso de C ++ unique_ptr
Los punteros inteligentes se utilizan para asignar el recurso dinámicamente. Muchos tipos de punteros inteligentes se utilizan en C ++ para diversos fines, como auto_ptr, único_ptr, y shared_ptr. El puntero Auto_PTR está en desuso en la nueva versión de C++. El único_ptr se usa en el reemplazo del auto_ptr. El objeto de este puntero puede tomar posesión del puntero. El objeto de este puntero posee el puntero de manera única, y ningún otro puntero puede señalar el objeto. El único_ptr elimina los objetos automáticamente. Este puntero gestiona esos objetos si los objetos se destruyen, o se cambia el valor del objeto o se llama a la función RESET (). Las características de unique_ptr y los usos de este puntero se discuten 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 de puntero, y se puede cambiar de diferente manera.

B. Deletro almacenado:

Toma el argumento del tipo de puntero almacenado que se usa para eliminar el objeto administrado. También se crea en el momento de la creación del puntero, y puede cambiarse de diferentes maneras.

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

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

// Incluye las bibliotecas necesarias
#incluir
#incluir
usando Namespace STD;
// Defina 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;

// Declarar método para calcular la suma
int resultado ()

retorno número1 + número2 + número3;

;
int main ()

// declarar el primer puntero
unique_ptr Pointer1 (nueva adición (45, 55, 30));
cout<<"The result of sum using the first pointer :"// declarar el segundo puntero
único_ptr pointer2;
// Mueve el primer puntero al segundo puntero
Pointer2 = Move (Pointer1);
cout<<"The result of sum using the second pointer :"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 consejos.

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

La forma de declarar un objeto de puntero único de una clase con constructor y destructor se ha mostrado en el siguiente ejemplo. La clase contiene un constructor con un argumento, un método público llamado Display () al 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 de puntero único en el código.

// Incluye las bibliotecas necesarias
#incluir
#incluir
usando Namespace STD;
// Defina la clase
Cliente de clase

nombre de cadena;
público:
// Declarar el constructor
Cliente (cadena n)

nombre = n;
cout<<"The resource is allocated.\n";

// Declarar método para imprimir el nombre del cliente
pantalla vacía ()

cout<<"The name of the customer is: "<< name <<"\n";

// Declarar al destructor
~ Cliente ()

cout<<"The resource is destroyed.\n";

;
int main ()

// asignar el objeto de recurso que es propiedad de unique_ptr
único_ptrupointer nuevo cliente ("Mir Abbas");
upointer-> display ();
return0;

Producción:

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

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

La forma de verificar la propiedad del puntero único ha demostrado en el siguiente ejemplo creando dos punteros únicos de una clase. Una clase con dos variables de cadena y un método público se ha declarado en el código. El método book_details () de la clase se llama después de crear el primer objeto de puntero único de la clase. A continuación, se ha creado el segundo objeto único de puntero, y el primer puntero se ha trasladado al segundo puntero que destruye el primer puntero. La propiedad de ambos consejos debe verificarse más tarde.

// Incluye las bibliotecas necesarias
#incluir
#incluir
usando Namespace STD;
// Defina la clase
Libro de clase
Title de cadena = "El lenguaje de programación C ++";
string autor = "bjarne stroustrup";
público:
// Declarar método para imprimir detalles del libro
VoidBook_Details ()

cout<<"Book Name: "<< title <<"\n";
cout<<"Author Name: "<< author <<"\n";

;
int main ()

// declarar el primer puntero
unique_ptr Pointer1 (nuevo libro ());
pointer1-> book_details ();
// declarar el segundo puntero
único_ptr pointer2;
// Mueve el primer puntero al segundo puntero
Pointer2 = Move (Pointer1);
// Verifique el primer puntero
if (static_cast (pointer1)) cout<<"The first poiner is not null\n";
Elsecout<<"The first poiner is null\n";
// Verifique el segundo puntero
if (static_cast (pointer2)) cout<<"The second poiner is not null\n";
Elsecout<<"The second poiner is null\n";
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. La propiedad del segundo puntero existe, 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 de C ++ se han descrito en este tutorial mediante el uso de múltiples ejemplos. Las formas de crear un puntero único, transferir la propiedad del puntero y verificar la propiedad actual del puntero se han explicado aquí para ayudar a los lectores a conocer el uso único correctamente.