On Thursday, 19 July 2012 at 15:36:01 UTC, Namespace wrote:
_counter is still 1 but the scope is released. How is that possible? Even with _arr.clear(); at the end of the scope, _counter is still 1.
I see one CTor and one Copy CTor but only one DTor.

_arr is actually a dynamic array, which allocates from the garbage collector. When _arr goes out of scope, you are only destroying the "Slice" that is looking at the data, but not the data itself. You have to wait until the Garbage Collector runs and collects.

Either that, or use a stack allocated static array, but I wouldn't recommend it.

Furthermore, D does not actually guarantee that all your objects are destroyed (eg. destructors called) when the program ends. D's approach is "The program has ended, ergo anything left in memory is moot. Just let the OS clear it."

If you really need RAII, you can use RefCounted objects, such as RefCounted! directly, or by using Array.

Reply via email to