Ejercicios sobre gestión de memoria dinámica
Ejercicio 1: Propiedad exclusiva con std::unique_ptr
Crea un programa que utilice std::unique_ptr para gestionar recursos con propiedad exclusiva.
- Define una clase
Sensorcon un métodoleer()que muestre un valor simulado. - En
main(), crea unstd::unique_ptr<Sensor>mediantestd::make_unique. - Transfiere la propiedad del sensor a otro puntero mediante
std::move. - Comprueba que el puntero original deja de ser propietario tras la transferencia.
Ejercicio 2: Propiedad compartida con std::shared_ptr
Diseña un programa que utilice std::shared_ptr para simular un recurso compartido entre varios objetos.
- Define una clase
RecursoCompartidocon un métodousar()que muestre un mensaje. - Crea varios
std::shared_ptr<RecursoCompartido>que apunten al mismo objeto. - Muestra el valor de
use_count()en distintos momentos para observar cómo cambia el contador de referencias. - Comprueba que el recurso se libera automáticamente cuando el último
shared_ptrdesaparece.
Ejercicio 3: Prevención de ciclos de referencias con std::weak_ptr
Implementa una pequeña estructura de objetos enlazados que utilice std::weak_ptr para evitar ciclos de referencias.
-
Define una clase
Nodocon:- Un
std::string nombre; - Un
std::shared_ptr<Nodo> siguiente; - Un
std::weak_ptr<Nodo> anterior.
- Un
-
Crea tres nodos y enlázalos en una lista doblemente enlazada.
-
Usa
use_count()para verificar que el contador de referencias no crece indefinidamente. -
Realiza un recorrido desde el
nodo1alnodo3. Y posteriormente otroo recorrido desde elnodo3alnodo1. -
Explica cómo el uso de
weak_ptrevita la fuga de memoria causada por referencias circulares.