Sobes.tech
Junior — Middle

Objasnite princip rada brojača referenci i njegovu upotrebu u upravljanju memorijom

sobes.tech АИ

Одговор од АИ

Brojač referenci je mehanizam za upravljanje memorijom u kojem se prati broj aktivnih referenci na svaki objekat. Kada se kreira nova referenca na objekat, brojač se povećava, a kada se referenca briše ili postane nedostupna, smanjuje. Kada brojač dostigne nulu, objekat se smatra neupotrebljivim i može biti oslobođen iz memorije.

Ovaj pristup pomaže automatski upravljati životnim vekom objekata i sprečava curenje memorije. Međutim, brojač referenci ima nedostatak: ne može pravilno da procesuira ciklične reference, kada objekti ukazuju jedan na drugog, ali nisu korišćeni spolja.

Primer upotrebe u 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;
        }
    }
};