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;
}
}
};