Sobes.tech
Junior — Middle

İstinad sayğacının iş prinsipi və yaddaş idarəsində istifadəsini izah edin.

sobes.tech Süni İntellekt

AI-dan cavab

İstinad sayğacı, hər obyektə aktiv istinadların sayını izləyən yaddaş idarəetmə mexanizmidir. Obyektə yeni istinad yaradıldıqda, sayğac artır, və istinad silindiyində və ya əlçatmaz olduqda, azaldılır. Sayğac sıfıra çatdıqda, obyekt istifadə edilmir sayılır və yaddaşdan azad edilə bilər.

Bu yanaşma obyektlərin həyat müddətini avtomatik idarə etməyə kömək edir və yaddaş sızmalarını qarşısını alır. Ancaq, istinad sayğacının bir çatışmazlığı var: o, döngüvi istinadları düzgün idarə edə bilmir, yəni obyektlər bir-birinə istinad edirsə, amma xaricdən istifadə olunmursa, problem yarana bilər.

C++-da istifadə nümunəsi:

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