Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Creación y Uso de Weak Pointers | Punteros Débiles
C++ Smart Pointers
course content

Contenido del Curso

C++ Smart Pointers

C++ Smart Pointers

1. Introducción a los Punteros Inteligentes
2. Punteros Únicos
3. Punteros Compartidos
4. Punteros Débiles
5. Temas Avanzados

book
Creación y Uso de Weak Pointers

Creación de Punteros Débiles

Normalmente, deberías crear un std::weak_ptr a partir de un std::shared_ptr existente. Esto asegura que el puntero débil observe un objeto que ya está gestionado por al menos un puntero compartido.

h

creating_weak_pointer

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

El std::weak_ptr p_weak se construye a partir de un std::shared_ptr p_shared existente. Esto significa que p_weak no incrementa el conteo de referencias de p_shared, sino que observa el mismo objeto gestionado. La validez de p_weak depende de p_shared; si todas las instancias de std::shared_ptr que gestionan el objeto son destruidas, p_weak expira y ya no se puede usar para acceder al objeto directamente.

Uso de Punteros Débiles

Para acceder a un objeto gestionado por un std::weak_ptr, primero debes convertirlo a un std::shared_ptr usando lock(). Este método verifica si el objeto aún está vivo y devuelve un std::shared_ptr a él, de lo contrario, devuelve un std::shared_ptr vacío.

Bloquear un puntero débil evita que el objeto sea destruido mientras está en uso. Dado que std::weak_ptr no contribuye al conteo de referencias, acceder directamente al objeto implicaría el riesgo de usar una instancia destruida. Convertirlo a un std::shared_ptr incrementa el conteo de referencias, asegurando que el objeto permanezca válido durante su uso.

h

converting

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Tarea

Swipe to start coding

Completa el siguiente código para crear un std::weak_ptr a partir de un std::shared_ptr, convertirlo de nuevo a un std::shared_ptr y acceder de manera segura al valor del objeto gestionado.

Solución

cpp

solution

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 2
toggle bottom row

book
Creación y Uso de Weak Pointers

Creación de Punteros Débiles

Normalmente, deberías crear un std::weak_ptr a partir de un std::shared_ptr existente. Esto asegura que el puntero débil observe un objeto que ya está gestionado por al menos un puntero compartido.

h

creating_weak_pointer

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

El std::weak_ptr p_weak se construye a partir de un std::shared_ptr p_shared existente. Esto significa que p_weak no incrementa el conteo de referencias de p_shared, sino que observa el mismo objeto gestionado. La validez de p_weak depende de p_shared; si todas las instancias de std::shared_ptr que gestionan el objeto son destruidas, p_weak expira y ya no se puede usar para acceder al objeto directamente.

Uso de Punteros Débiles

Para acceder a un objeto gestionado por un std::weak_ptr, primero debes convertirlo a un std::shared_ptr usando lock(). Este método verifica si el objeto aún está vivo y devuelve un std::shared_ptr a él, de lo contrario, devuelve un std::shared_ptr vacío.

Bloquear un puntero débil evita que el objeto sea destruido mientras está en uso. Dado que std::weak_ptr no contribuye al conteo de referencias, acceder directamente al objeto implicaría el riesgo de usar una instancia destruida. Convertirlo a un std::shared_ptr incrementa el conteo de referencias, asegurando que el objeto permanezca válido durante su uso.

h

converting

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Tarea

Swipe to start coding

Completa el siguiente código para crear un std::weak_ptr a partir de un std::shared_ptr, convertirlo de nuevo a un std::shared_ptr y acceder de manera segura al valor del objeto gestionado.

Solución

cpp

solution

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 2
Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
Lamentamos que algo salió mal. ¿Qué pasó?
some-alt