was genau bedeutet Referenzzählung in C ++ ?,

8

Was genau ist Referenzzählung? Insbesondere was ist es für C ++? Mit welchen Problemen können wir konfrontiert werden, wenn wir nicht damit umgehen? Erfordern alle Sprachen Referenzzählung?

    
Naruto 06.04.2012, 19:17
quelle

4 Antworten

7

Was genau ist Referenzzählung? Insbesondere was ist es für C ++?

In einfachen Worten bedeutet Referenzzählung, die Referenzen auf ein Objekt zu zählen.

In der Regel verwendet C ++ die Methode RAII . Wobei die Fähigkeit, die Freigabe eines Typobjekts zu verwalten, innerhalb des Typobjekts selbst gebunden ist. Dies bedeutet, dass der Benutzer die Lebensdauer des Objekts und dessen Freigabe nicht explizit explizit verwalten muss. Die Funktionalität für diese Verwaltung ist im Objekt selbst enthalten.

Diese Funktionalität bedeutet, dass das Objekt existieren und gültig bleiben soll, bis es Stakeholder gibt, die auf das Objekt verweisen, und dies wird durch Referenzzählung erreicht. Jedes Mal, wenn das Objekt freigegeben (kopiert) wird, wird die Referenzzählung (typischerweise ein Mitglied innerhalb des Klassentyps) inkrementiert und jedes Mal, wenn der Destruktor aufgerufen wird, wird die Zählung dekrementiert, wenn die Zählung 0 erreicht, wird das Objekt nicht von irgendjemandem referiert markiert das Ende seiner Lebenszeit und daher ist es zerstört.

Mit welchen Problemen können wir konfrontiert werden, wenn wir sie nicht behandeln?

Es würde nicht mehr RAII bedeuten, und endloses und oft fehlerhaftes manuelles Ressourcenmanagement.
Kurz gesagt, Alpträume zu programmieren.

Erfordern alle Sprachen eine Referenzzählung?

Sprachen erfordern keine Referenzzählung, aber die Verwendung dieser Technik bietet eine sehr einfache Verwendung und weniger Aufwand für die Benutzer der Sprache. Daher ziehen es die meisten Sprachen vor, sie zu verwenden, um ihren Benutzern diese Vorteile zu bieten / p>     

Alok Save 06.04.2012 19:26
quelle
1

Die Referenzzählung ist ein einfacher, aber nicht vollständiger Ansatz für die Mülldetektion.

Wenn der Zähler Null erreicht, können Sie das Objekt freigeben.

ABER wenn es keine gebrauchten Objekte mehr gibt, die zyklisch aufeinander verweisen, werden sie niemals freigegeben

Betrachten Sie Referenzen b, b Referenzen a, aber sonst nichts Referenzen a oder b. Die Anzahl der Referenzen auf a und b ist immer noch 1 (= in Verwendung)

    
stefan bachert 06.04.2012 19:23
quelle
0

Die Gather-Auflistung mit Verweiszähler ist eine leistungsstarke Technik zur Speicherverwaltung, mit der verhindert wird, dass Objekte versehentlich oder mehrmals gelöscht werden. Die Technik ist nicht auf C ++ - Code beschränkt und steht trotz ihres Namens in keinem Zusammenhang mit dem C ++ - Konzept von Referenzvariablen. Der Begriff bedeutet vielmehr, dass wir alle "eigenen Referenzen" auf ein Objekt zählen und das Objekt löschen, wenn dieser Wert Null wird.

    
IndieProgrammer 06.04.2012 19:21
quelle
-2

Referenzzählung - verwenden Sie eine Metapher.

Sie haben ein Ohr. Du willst es irgendwann wieder haben.

Du bekommst eine Gruppe von Leuten, die auf dein Ohr zeigen. Sie zählen sie, sobald sie zeigen.

Wenn die Zahl auf Null geht - es ist nur Ihre und Sie können damit tun, was Sie wollen.

i.e. nimm es aus der Gleichung (befreie es zurück in den Speicher).

Übrigens. Circular Zeug ist schwierig zu erkennen.

    
Ed Heal 06.04.2012 19:24
quelle