GC & shared ownership für objekte die "entsorgt" werden müssen (IDisposable)
-
Siehe Überschrift.
Gibt's irgendeinen "Standard" was das angeht?Ich hatte ein paar mal eine Situation wo ich mir sowas gewünscht hätte, bzw. wo ich ziemlich hässlich drum rum arbeiten musste.
Natürlich kann man sich selbst was basteln, aber ... das kanns ja dann irgendwie nicht sein!
p.S.: Lösungen/Standard-Patterns für Java/... sind auch willkommen, ich hab IDisposable im Titel nur dazugeschrieben um deutlich zu machen was ich mit "muss entsorgt werden" meine
-
meinste das: http://en.wikipedia.org/wiki/Dispose_pattern ?
-
Ist die Frage jetzt ernst gemeint? Du verstehst schon was "shared ownership" bedeutet, oder?
Also ne, das meine ich nicht.Ich meine Fälle in denen sich genau das nicht anwenden lässt, weil es eben mehrere "Besitzer" gibt die sich ein Objekt "teilen", welches aber trotzdem deterministisch entsorgt werden soll.
Ich meine das, wofür es in C++ "shared_ptr" gibt.
-
hustbaer schrieb:
Ich meine Fälle in denen sich genau das nicht anwenden lässt, weil es eben mehrere "Besitzer" gibt die sich ein Objekt "teilen", welches aber trotzdem deterministisch entsorgt werden soll.
am einfachsten z.b. mit 'nem zähler, etwa so
class Counted { private int counter; private Counted() { } public static Counted getReference (Counted t) { System.out.println ("Get"); if (t == null) { t = new Counted(); } if (t.counter == 0) { System.out.println ("+++"); } t.counter++; return t; } public void dispose() { System.out.println ("Dispose"); counter--; if (counter == 0) { System.out.println ("---"); } } } ... Counted t1 = Counted.getReference(null); // erstes objekt und nicht-GC ressourcen initialisieren Counted t2 = Counted.getReference(t1); // weitergeben Counted t3 = Counted.getReference(t1); // weitergeben t1.dispose(); // passiert nix t2.dispose(); // passiert nix t3.dispose(); // Ressource wird gelöscht ...
-
hustbaer schrieb:
Natürlich kann man sich selbst was basteln, aber ... das kanns ja dann irgendwie nicht sein!
-
hustbaer schrieb:
hustbaer schrieb:
Natürlich kann man sich selbst was basteln, aber ... das kanns ja dann irgendwie nicht sein!
sowas wie c++'s 'shared ptr' hat auch mal wer gebastelt. ansonsten: sprachen wie java z.b. haben kein eingebautes feature, um sowas zu machen.
-
Hat ausser fricky noch jemand was zu dem Thema zu sagen?
Vielleicht irgendwas was ich nicht schon weiss?
-
Wie/Wo werden deine Objekte denn geshared?
-
Naja, einfach fuer jedes open() ein close() setzen. So macht es C++, so lese ich es grade in "Java effektiv programmieren", ... k.A. ob es ein Standardvorgehen gibt, aber die Verantwortung liegt beim Programmierer. Aber das wusstest du sicherlich schon.
-
Außer Finalizer und Referenzzählung fällt mir zu dem Thema nichts ein, aber ich würde beides als Standardvorgehen bezeichnen und weiß nicht genau, was du sonst mit "Standard" meinen könntest.