Wie verfolge ich die Anzahl der Instanzen eines Typs?

8

In objektorientierten Sprachen verwende ich Klassenvariablen, um nachzuvollziehen, wie viele Instanzen derzeit generiert werden, indem bei der Konstruktion inkrementiert und bei der Zerstörung dekrementiert wird.

Ich versuche, ähnliches Verhalten in go zu implementieren:

%Vor%

und das funktioniert auf halbem Wege, da ich den Zähler nicht über einen Destruktor dekrementieren kann.

Kann ich die Zerstörung von Objekten irgendwie nachahmen? Wie würde ich die Anzahl der Instanzen korrekt verfolgen?

    
matthias krull 09.11.2012, 13:26
quelle

2 Antworten

9

Sie können runtime.SetFinalizer so verwenden. Siehe hier für die Version für den Spielplatz.

%Vor%

Dies druckt

%Vor%

Beachten Sie dies in der Dokumentation für Fehler mit Finalizern

  

Der Finalizer für x wird zu einem beliebigen Zeitpunkt nach x ausgeführt   wird unerreichbar. Es gibt keine Garantie, dass Finalizer ausgeführt werden   bevor ein Programm beendet wird, sind sie normalerweise nur für   Freigeben von Nicht-Speicher-Ressourcen, die mit einem Objekt assoziiert sind, während eines   lang laufendes Programm.

    
Nick Craig-Wood 09.11.2012, 18:52
quelle
5

Es gab eine Diskussion über Golan-Nüsse über Finalizer.

Für jetzt

  • es gibt keine Finalizer-Funktion (Bearbeiten: keine zuverlässige Finalizer-Funktion, wie mir Nick gezeigt hat)
  • Der GC verwendet keine Verweisanzahl und behält diese nicht bei

Sie müssen also Ihre Instanzzählung selbst verwalten.

Normalerweise haben Sie keine Instanzen, die von sich selbst leben. Für viele praktische Anwendungen (ohne das Profiling eines komplexen und schwer verständlichen Programms) können Sie defer verwenden, um das Ende der Lebensdauer Ihrer Variablen zu verfolgen . Ich werde nicht so tun, als ob Finalizer wirklich ersetzt, aber es ist einfach und oft ausreichend.

    
Denys Séguret 09.11.2012 13:40
quelle

Tags und Links