C++: Punteros inteligentes

Uso de un borrador personalizado en C++ Smart Pointers

¡Prueba gratis durante 10 días

nuestros 1268 cursos !

Prueba gratis Mostrar modalidades de suscripción
Al destruir un puntero inteligente se destruye el objeto gestionado. Si esto no es suficiente y quieres eliminar otros recursos dependientes, puedes utilizar un borrador personalizado. En este apartado vamos a ver cómo utilizarlos.
03:43

Transcripción

Cuando se destruye un puntero inteligente, puede que necesites hacer algo más que destruir el objeto gestionado. En este caso, puedes definir un borrador personalizado. Aquí tengo una copia de "custom_deleter.cpp" de los archivos base, y la clase "strc" abierta en este proyecto. Al crear el puntero inteligente, especifico la dirección; un puntero a esta función borrador. Esta es la función borrador. La función borrador saca por pantalla el valor del objeto, se le pasa el puntero estándar al objeto. No se le pasan los punteros inteligentes, se le pasa el puntero clásico o el objeto. Saca su valor por pantalla y utiliza el operador de borrado para liberar el recurso. El borrador personalizado es el responsable de liberar el recurso. También puedes incluir en el borrador personalizado cualquier otra tarea que necesites hacer, no solo llamar a "delete". No vas a necesitarlo, es solo un ejemplo. Especificas el borrador en el constructor del puntero inteligente. Por eso no puedes utilizar la función de conveniencia "make_shared" si necesitas especificar un borrador personalizado. El borrador puede ser un puntero a función a C. Podría ser un cierre "closure", de "lambda", o una clase como un "functor", u objeto función. Por ejemplo, aquí voy a crear una clase. Voy a copiar todo esto aquí arriba para crear una clase. La voy a llamar "D" de "deleter", borrador. En su sección pública voy a crear un "functor", que es la función llamada "operador", y que tiene este aspecto. Voy a pegar todo el contenido de borrador aquí, o al menos, una gran parte del código. Ahora tengo mi borrador personalizado como un "functor". Puedo ir aquí, y en vez de todo esto, puedo poner una D mayúscula y así llamo al borrador. En realidad, creo que también necesito poner el paréntesis para llamar a "functor" desde el borrador. Ahora compilo y ejecuto, y obtengo el mismo resultado. Ahí está el borrador que muestra el valor y llama al destructor. En realidad, no he compilado y ejecutado su versión con función; si lo hago, pongo "deleter", necesitamos sacar la dirección así. Compilo, ejecuto, y obtengo exactamente el mismo resultado. Una última cosa que puedes hacer aquí en vez de usar una función separada, o un "functor" separado si quieres, es utilizar un cierre de "lambda", que básicamente es un puntero a función en línea que tiene este aspecto. Luego copias aquí el código que necesites y pones "delete o", así. Ejecuto, compilo, y obtengo el mismo resultado. Llama al destructor, y cuando intento sacarlo por pantalla después del "reset", me da "nule". En la mayoría de los casos, el borrador por defecto, que simplemente llama a un método destructor sobre el objeto gestionado, funcionará perfectamente. Pero está bien saber cómo especificar tu propio borrador en caso de que necesites limpiar algunos otros recursos dependientes.

C++: Punteros inteligentes

Conoce los punteros inteligentes, un componente fundamental en C++, que garantizan que tanto la memoria como otros recursos se asignen de forma adecuada y eficaz.

25 min (7 Videos)
Actualmente no hay comentarios.
 
Software:
Fecha de publicación:14/12/2016

Este curso video2brain está disponible como descarga y para ser visualizado online. ¡Pero no hace falta que decidas entre las dos opciones! Al comprar el curso, disfrutarás de ambas posibilidades.

La descarga te permite ver las lecciones sin estar conectado/a a internet y supone una navegación fácil y ágil entre capítulo y capítulo. Si vas a trabajar en diferentes ordenadores o si no quieres descargarte el curso completo, entra en la web con tus datos de acceso y disfruta directamente de tus vídeos online. Te deseamos que disfrutes de este curso y te resulte de mucha utilidad.

Estamos a tu disposición si tienes cualquier tipo de duda o pregunta.