Sobes.tech
Junior — Middle

Explique o princípio de funcionamento do contador de referências e seu uso na gestão de memória.

sobes.tech IA

Resposta da IA

O contador de referências é um mecanismo de gestão de memória em que é mantido um contador de referências ativas a cada objeto. Quando uma nova referência a um objeto é criada, o contador aumenta, e quando a referência é removida ou torna-se inacessível, diminui. Quando o contador atinge zero, o objeto é considerado não utilizado e pode ser libertado da memória.

Esta abordagem ajuda a gerir automaticamente o tempo de vida dos objetos, prevenindo fugas de memória. No entanto, o contador de referências tem uma desvantagem: não consegue lidar corretamente com referências cíclicas, quando objetos referenciam-se mutuamente mas não são utilizados externamente.

Exemplo de uso em C++:

class SharedPtr {
    T* ptr;
    int* ref_count;
public:
    SharedPtr(T* p) : ptr(p), ref_count(new int(1)) {}
    SharedPtr(const SharedPtr& sp) {
        ptr = sp.ptr;
        ref_count = sp.ref_count;
        ++(*ref_count);
    }
    ~SharedPtr() {
        if (--(*ref_count) == 0) {
            delete ptr;
            delete ref_count;
        }
    }
};