Sergey Gromov wrote: > Fri, 14 Aug 2009 13:55:18 +1000, Daniel Keep wrote: > >> void dropElement(T)(ref T[] arr, size_t i) >> { >> assert( i < arr.length ); >> arr[i] = arr[$-1]; >> arr = arr[0..$-1]; >> } > > I think it's important to erase the last element after the move to make > sure no dangling references to unused data are left in a memory area you > don't manage anymore: > > | void dropElement(T)(ref T[] arr, size_t i) > | { > | assert( i < arr.length ); > | arr[i] = arr[$-1]; > arr[$-1] = T.init; > | arr = arr[0..$-1]; > | } > > This is a sad consequence of conservative garbage collection.
Excellent point; I forgot about that.