0% encontró este documento útil (0 votos)
9 vistas7 páginas

Functores y Punteros Inteligentes en C++

Este documento describe los conceptos de functor y smart pointers en C++. Explica que los functores son clases que sobrecargan el operador () para actuar como funciones. Los smart pointers como unique_ptr, shared_ptr y weak_ptr permiten la gestión automática de memoria al liberar objetos cuando ya no son referenciados. Proporciona ejemplos de declaración y uso de estos conceptos.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
9 vistas7 páginas

Functores y Punteros Inteligentes en C++

Este documento describe los conceptos de functor y smart pointers en C++. Explica que los functores son clases que sobrecargan el operador () para actuar como funciones. Los smart pointers como unique_ptr, shared_ptr y weak_ptr permiten la gestión automática de memoria al liberar objetos cuando ya no son referenciados. Proporciona ejemplos de declaración y uso de estos conceptos.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN

FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS

ESCUELA PROFESIONAL DE CIENCIA DE LA COMPUTACIÓN

“Ciencia de la Computación II”

Estudiante:
Andrea del Rosario Lopez Condori

Profesor: Alvaro Henry Mamani Aliaga

Grupo: “A”

AREQUIPA – PERÚ
2022
1. Functor
1.1 DEFINICIÓN
Los functores son los objetos de clase que al instanciarlos tienen la posibilidad de
actuar como [Link] primordial virtud de los functores es que, aunque no
son funcionalidades, todavía tienen la posibilidad de guardar el estado debido a que
son objetos de clase.

Los funtores se realizan sobrecargando el operator () en cualquier clase para que el


objeto de dicha clase logre ser denominado, como llamamos a una funcionalidad fácil.

1.2 UTILIDAD
La solución viene con C + +. Functores en el lenguaje C + + son clases que tienen
sobrecargado el operador(). Esto permite utilizar una instancia de una clase como una
función – y sólo una función y no cualquiera.

1.3 DECLARACIÓN

Img. 1
En la imagen 1 se muestra que el functor es una clase con el método operator() sin
parámetros.

1.3.1 Funcotres con parámetros

Img. 2
Los funtores también se pueden definir con algunos parámetros y tipo de retorno, al
igual que las funciones. Podemos modificar el funtor anterior para incluir el
parámetro en él.

1.3.2 Herencia de Functores


Los functores son clases de C + + y, por lo tanto, se pueden definir todos los métodos
en ellos como en cualquier otra clase. Y también se pueden heredar.
Un functor derivado puede sobrescribir el método operator() con su propia
implementación. Más interesante es aún declarar un operator() virtual. Así podemos
crear una interfaz de functor que se puede implementar de varias formas.
Img. 3

1.4 EJEMPLOS

Img. 4
En la imagen 4 podemos ver un ejemplo sencillo, en la salida que el operador de
llamada de función llamada operador() se llama cuando usamos el objeto con el
operador. El resultado es el siguiente:

2. Smart Pointers
2.1 DEFINICIÓN
Un puntero inteligente es un tipo abstracto de datos que simula el comportamiento de
un puntero corriente pero añadiendo nuevas características adicionales, como gestión
automática de memoria y comprobador de límites

2.2 UTILIDAD
Utilizando Smart Pointers , tenemos la posibilidad de hacer que los punteros
funcionen de una forma que no necesitemos llamar explícitamente a delete. Un
puntero inteligente es una clase contenedora sobre un puntero con un operador como
* y -> sobrecargado. Los objetos de la clase de puntero inteligente parecen un puntero
sin embargo tienen la posibilidad de hacer muchas cosas que a un puntero habitual no
le tienen la posibilidad de agradar la devastación automática (sí, no poseemos que
utilizar explícitamente eliminar), el recuento de referencias y más.
2.3 DECLARACIÓN
En el ejemplo siguiente se compara una declaración de puntero sin formato con una
declaración de puntero inteligente.

2.4 TIPOS
Los punteros inteligentes permiten ser eliminados de la memoria automáticamente
cuando el nombre de la variable sale de su ámbito. La biblioteca <memory> ofrece
distintos tipos, lo más comunes son:

2.4.1 unique_ptr
Si está utilizando un puntero único, entonces si se crea un objeto y el puntero P1
apunta a este, solo un puntero puede apuntar a este a la vez. Entonces, no podemos
compartir con otro puntero, pero podemos transferir el control a P2 eliminando P1.
Estos punteros tienen dos funcionalidades esenciales:

• Solo puede haber un puntero único en una dirección de memoria al mismo tiempo.
• La memoria se libera automáticamente cuando el puntero abandona su ámbito.
Img. 4
2.4.2 shared_ptr
Este tipo de puntero inteligente permite que múltiples punteros apunten a la misma
dirección de memoria, es decir, podemos tener copias de la dirección. El sistema
detectará automáticamente cuando no quede ninguna copia viva en su ámbito y
entonces liberará automáticamente el espacio en la memoria.

Si está utilizando shared_ptr, más de un puntero puede apuntar a este objeto a la vez y
mantendrá un contador de referencia utilizando el método use_count().
2.4.3 weak_ptr
Los punteros débiles contienen una referencia sin posesión (débil) a un objeto que es
gestionado por std::shared_ptr. Debe convertirse a std::shared_ptr para poder acceder
al objeto referenciado. No implementan operadores flecha -> ni asterisco *, por lo que
no se pueden utilizar directamente para leer ni modificar los datos:

Es mucho más similar a shared_ptr excepto que no mantendrá un contador de


referencia . En este caso, un puntero no tendrá un fuerte control sobre el objeto. La
razón es que si supongamos que los punteros sostienen el objeto y solicitan otros
objetos, pueden formar un punto muerto

También podría gustarte