Sobes.tech
Junior — Middle

Εξηγήστε την αρχή λειτουργίας του μετρητή αναφορών και τη χρήση του στη διαχείριση μνήμης.

sobes.tech AI

Απάντηση από AI

Ο μετρητής αναφορών είναι ένας μηχανισμός διαχείρισης μνήμης στον οποίο διατηρείται ένας λογαριασμός ενεργών αναφορών σε κάθε αντικείμενο. Όταν δημιουργείται μια νέα αναφορά σε ένα αντικείμενο, ο μετρητής αυξάνεται, και όταν η αναφορά διαγράφεται ή γίνεται μη προσβάσιμη, μειώνεται. Όταν ο μετρητής φτάσει το μηδέν, το αντικείμενο θεωρείται μη χρησιμοποιούμενο και μπορεί να απελευθερωθεί από τη μνήμη.

Αυτή η προσέγγιση βοηθά στη αυτόματη διαχείριση του χρόνου ζωής των αντικειμένων, αποτρέποντας διαρροές μνήμης. Ωστόσο, ο μετρητής αναφορών έχει ένα μειονέκτημα: δεν μπορεί να χειριστεί σωστά κυκλικές αναφορές, όταν τα αντικείμενα αναφέρονται το ένα στο άλλο αλλά δεν χρησιμοποιούνται από το εξωτερικό.

Παράδειγμα χρήσης σε 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;
        }
    }
};