Answer will make more sense if ar is assumed to be any
heap-allocated object, not just dynamic array.
On Monday, 30 December 2013 at 06:52:20 UTC, Ilya Yaroshenko
wrote:
case 1:
delete ar;
Deprecated. Used to call destructor and GC.free after that
case 2:
ar.destroy();
Current solution to free resources in deterministic way. Calls
destructor and sets `ar` to init state so that it can be
collected by GC at some unknown point later.
case 3:
GC.free(ar.ptr);
Marks memory as freed in GC. Unsafe and discouraged because there
can still be references pointing at it.
case 4:
ar = null;// (assumed that ar is only one pointer to the same
array)
Simply cleans the reference to an object. If it was the only
reference, it will be destroyed and freed upon next GC cycle.
What is the difference?
How to free memory to the system immediately?
GC.free
However, if you want deterministic deallocation it makes more
sense to use C malloc or custom allocators as GC tends to run
faster if it is aware of less memory.