Sobes.tech
Junior — Middle

Selgitage viitearvuti tööpõhimõtet ja selle kasutamist mälu haldamisel

sobes.tech AI

Vastus AI-lt

Viitearv on mäluhalduse mehhanism, kus hoitakse iga objekti aktiivsete viidete arv. Kui uue viite objekti juurde luuakse, suureneb arv, ja kui viide kustutatakse või muutub kättesaamatuks, väheneb see. Kui arv jõuab nullini, loetakse objekt kasutuks ja see võib vabastada mälu.

See lähenemine aitab automaatselt hallata objektide elutsüklit ja vältida mälulekkeid. Kuid viitearvul on puudus — see ei saa õigesti käsitleda tsüklilisi viiteid, kui objektid viitavad üksteisele, kuid ei kasutata väljastpoolt.

Näide C++-is:

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