30. Automatic Reference Counting

Este desafío busca simular el concepto de "Automatic Reference Counting" (ARC) que se utiliza en lenguajes como Swift u Objective-C para la gestión de memoria. No se trata de liberar memoria real, sino de un ejercicio conceptual.

Crea un sistema simple donde los "objetos" tienen un contador de referencias. Cuando un objeto es referenciado, su contador aumenta. Cuando una referencia se elimina, el contador disminuye. Cuando el contador llega a cero, el objeto puede considerarse "liberado".

class ObjetoConARC:
    def __init__(self, identificador: str):
        self.identificador = identificador
        self._ref_count = 0
        print(f"Objeto {self.identificador} creado.")

    def __repr__(self):
        return f"<Objeto {self.identificador} (Refs: {self._ref_count})>"

    # Métodos a implementar
    def retener(self):
        # Aumentar contador de referencias
        pass

    def liberar(self):
        # Disminuir contador de referencias. Si llega a 0, "liberar" el objeto.
        pass

# Ejemplo de uso conceptual
# obj1 = ObjetoConARC("A")
# obj1.retener() # ref_count = 1
# obj2 = obj1    # Esto en Python es otra referencia, no necesitas "retener" de nuevo
# obj1.retener() # ref_count = 2
# obj1.liberar() # ref_count = 1
# obj2.liberar() # ref_count = 0, Objeto "A" liberado

Ratoncito

Implementa los métodos retener y liberar para manipular el contador de referencias. Cuando el contador llega a cero, imprime un mensaje indicando que el objeto ha sido "liberado". Considera que la clase ObjetoConARC no puede tener variables mutables (excepto el contador en este caso, que se maneja internamente).

Dragón

Introduce el concepto de "referencias cíclicas". Modifica tu sistema para detectar o prevenir referencias cíclicas que podrían causar fugas de memoria (objetos que nunca llegan a 0 referencias porque se referencian mutuamente). Esto es un problema complejo en ARC real; puedes simular una detección simple o explicar cómo se abordaría.

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

Visitors in real time

You are alone: 🐱