deep copy or shallow copy?
Ali Çehreli
acehreli at yahoo.com
Fri Dec 9 15:36:05 PST 2011
On 12/09/2011 02:58 PM, Jonathan M Davis wrote:
> On Friday, December 09, 2011 14:33:38 Ali Çehreli wrote:
[...]
>> That's news to me. Don't the static array elements belong to the
>> runtime, managed by the garbage collector, and will be kept alive as
>> long as the slice is alive?
>
> Goodness no. The static array is on the stack, not on the heap. If
you append
> to a dynamic array which refers to a static array, then it'll
reallocate that
> memory onto the heap (leaving the original static array alone) so
that the
> dynamic array is then managed by the runtime, but the static array
never is,
> since it's on the stack, and as long as the dynamic array is a slice
of the
> static array, it's going to be pointing to the wrong thing if the
static array
> leaves scope.
>
> So, slicing a static array to pass it to a function which isn't going
to keep
> the memory around isn't a big deal, but doing something like
>
> int[] func()
> {
> int[5] a;
> return a[];
> }
>
> is as bad as
>
> int* func()
> {
> int a;
> return&a;
> }
>
> though at least in the second case, the compiler will give you an
error. The
> first probably should as well, but it doesn't currently. It _is_
escaping a
> reference to a local variable though, which is a bug.
>
> - Jonathan M Davis
Thank you. Opened:
http://d.puremagic.com/issues/show_bug.cgi?id=7087
Ali
More information about the Digitalmars-d-learn
mailing list