On 6.11.2012 21:59, Ali Çehreli wrote:
On 11/06/2012 12:00 PM, luka8088 wrote:> Yes, but it seems that we can in general say that the following code > will never fail... or am I wrong ? > > import core.memory; > > class a { > static int totalRefCount = 0; > this () { totalRefCount++; } > ~this () { totalRefCount--; } > } > > void main () { > assert(a.totalRefCount == 0); > ({ > auto a1 = new a(); > assert(a.totalRefCount == 1); > })(); > GC.collect(); The current definition of GC.collect() explicitly says that its definition may change: http://dlang.org/phobos/core_memory.html#collect "the meaning of this may change based on the garbage collector implementation". > assert(a.totalRefCount == 0); > } > >> >> In fact, some objects may never be collected even if there are no more >> references to them. > > Can you give me an example ? I can't come up with an example but the spec is clear on that issue: http://dlang.org/class.html#destructors "The garbage collector is not guaranteed to run the destructor for all unreferenced objects. Furthermore, the order in which the garbage collector calls destructors for unreference objects is not specified. This means that when the garbage collector calls a destructor for an object of a class that has members that are references to garbage collected objects, those references may no longer be valid. This means that destructors cannot reference sub objects." Ali
I see, so is there some alternative for memory leak tests ? Luka
