Sun, 29 Mar 2009 17:42:48 -0400, Chad J wrote: > Simon TRENY wrote: >> Hello, >> >> I have a class "A" and I'd like to keep a list of all the created instances >> of this class. To do that, I have a static List!(A) in the A class and, in >> the constructor, I add each new instance to this list. This gives me the >> following code: >> >> class A { >> private static List!(A) s_instances; >> >> public this() { >> s_instances.add(this); >> } >> >> public ~this() { >> s_instances.remove(this); >> } >> >> public static void printAll() { >> foreach (A instance; s_instances) >> print(instance.toString()); >> } >> } >> >> But then, since all the instances are referenced by the static list, they >> are never garbage-collected, which could be a problem. In some other >> languages, this can be solved using weak references, but I haven't found any >> informations about using weak references in D. Is there any way to solve >> this problem? >> >> Thanks, >> Simon >> > > Maybe what you are looking for are the GC.removeRoot or GC.removeRange > functions which are available in both Phobos and Tango? > http://www.dsource.org/projects/tango/docs/current/tango.core.Memory.html > http://www.digitalmars.com/d/2.0/phobos/std_gc.html > http://www.digitalmars.com/d/1.0/phobos/std_gc.html
You can remove only something previously added. Since a static array is not a root nor a range of roots, you can't make it invisible to GC this way.