Puntero inteligente en c ++

Puntero inteligente en c ++
Smart Pointer es un concepto muy importante introducido en C++. Smart Pointer se usa en C ++ para resolver el problema de usar un puntero normal. Para eliminar los inconvenientes del puntero normal, el puntero inteligente existe en la C++.

Puntero inteligente vs puntero regular

Los dos principales problemas del uso de punteros regulares son:

a. El puntero regular no puede administrar la utilización de la memoria de manera eficiente.

b. No puede liberar el objeto de memoria cuando no se usan en el programa.

C. Como el puntero normal no se puede asignar la memoria del objeto, si el puntero se elimina del programa, la dirección del objeto de memoria señala el puntero no se encuentra. Como resultado, pérdida de memoria ocurrir.

Para esto, usamos el puntero inteligente sobre el puntero regular. Las ventajas de los consejos inteligentes sobre los punteros regulares son:

a. Administra la memoria automáticamente.

b. Lanzó la memoria del objeto cuando no se usan en el programa.

C. De asigna la memoria del objeto cuando el puntero sale del alcance en el programa.

d. Smart Pointer se usa en C ++ para asignar los objetos, atravesando los diferentes tipos de estructura de datos y administra diferentes tipos de expresión de lambda para pasar dentro de la función.

mi. Hace que nuestro programa sea muy seguro y seguro. Como resultado, el programa se convierte en muy simple de entender y se vuelve más fácil de depurar.

Diferentes tipos de punteros inteligentes

Normalmente, hay tres tipos de consejos inteligentes disponibles en C++. Ellos son:

a. Único

b. Compartido

C. Débil.

Discutiremos cada uno de ellos a continuación.

a. Puntero único

a. El puntero único contiene un puntero a un objeto. Libera la memoria del objeto cuando sale del alcance.

b. Una de las características únicas del puntero único es que solo hay una copia de un objeto presente en la memoria. Ningún otro recurso puede señalar ese objeto en particular.

C. Si hay muchos recursos disponibles para un objeto en el código, ocurre un error de tiempo de compilación.

Programación Ejemplo 1:

#incluir
#incluir
usando el espacio de nombres STD;
Claza de clase
int
público :
Cuadrado (int s)

lado = s;

área int ()

return (lado*lado);

;
int main ()

unique_ptr p1 (nuevo cuadrado (2));
cout< area () <regresar 0;

Producción:

Explicación:

Aquí creamos una clase llamada Square. Dentro de la clase, se declara un lado variable y llama al constructor para inicializar el valor de la variable lateral. Ahora, definimos una función llamada área que devuelve su valor de área.

Dentro de la función main (), declaramos un puntero único llamado unique_ptr. Ahora, creamos un puntero P1 que apunta el objeto de la clase cuadrada y dentro de su paréntesis, pasamos un valor 2.

Ahora, si imprimimos el área a través del puntero P1 como P1-> área (), muestra que el área del cuadrado es 4.

b. Puntero compartido

a. El puntero compartido se puede aplicar en el programa cuando queremos asignar un puntero a múltiples recursos de objetos.

b. Shared Pointer es una dirección generada que cuenta el puntero inteligente, que se puede usar para almacenar y pasar una referencia más allá del alcance de una función.

C. Es muy útil en OOP (programa orientado a objetos). Para almacenar un puntero como variable miembro, se utiliza un puntero compartido.

d. El puntero compartido no se eliminará hasta que todos los recursos hayan completado su tarea.

Programación Ejemplo 2:

#incluir
#incluir
usando el espacio de nombres STD;
Claza de clase
int
público :
Cuadrado (int s)

lado = s;

área int ()

return (lado*lado);

;
int main ()

shared_ptrp1 (nuevo cuadrado (2));
// Introducir el puntero compartido;
shared_ptrp2;
P2 = P1;
coutcoutregresar 0;

Producción:

Explicación:

Este ejemplo de programación 2 es la continuación del ejemplo de programación 1. Dentro de la función main (), presentamos el puntero compartido. Usando el puntero P1, creamos el objeto de la clase cuadrada. El mismo objeto es señalado por el valor p2-> área () y p1-> área (). Ambos muestran que el área de la plaza es 4.

C. Puntero débil

a. El puntero débil es un caso especial de puntero que se utilizará con los punteros compartidos.

b. El puntero débil tiene una instalación para acceder a un objeto que es propiedad de una o más instancia de puntero compartido.

C. No es parte del conteo de referencia.

d. Usamos el puntero débil en el programa cuando queremos observar un objeto, pero no exigimos que permanezca vivo.

Programación Ejemplo 3:

#incluir
#incluir
usando el espacio de nombres STD;
Claza de clase
int
público :
Cuadrado (int s)

lado = s;

área int ()

return (lado*lado);

;
int main ()

shared_ptrp1 (nuevo cuadrado (2));
débil_ptrw1;
débil_ptr w2 (w1);
débil_ptr w3 (p1);
cout<< "w1:" << w1.use_count()<cout<< "w2:" << w2.use_count()<cout<< "w3:" << w3.use_count()<regresar 0;

Producción:

Explicación:

Este ejemplo de programación 3 es la continuación del ejemplo de programación 2. Aquí, presentamos un puntero compartido llamado Shared_PTR y creamos un puntero P1 para apuntar el objeto de la clase cuadrada. Ahora usamos el puntero débil, débil_ptr que señala W1 y W2. Dentro del W2, pasamos W1. Creamos otro puntero débil W3 donde pasamos el puntero P1.

Ahora si imprimimos todo el W1.use_count () y w2.use_count (), se mostrará el resultado.

Conclusión

Al discutir sobre el concepto y los usos del puntero inteligente en detalle, hemos llegado a esta conclusión de que el puntero inteligente se introduce en C ++ para eliminar los inconvenientes del puntero normal. A través del puntero inteligente, podemos administrar diferentes tipos de propietarios y recursos del objeto de manera muy eficiente. Esperamos que este artículo sea útil. Echa un vistazo a otros artículos de Sugerencia de Linux para obtener más consejos y tutoriales.