Confusion over what types have value vs reference semantics

Neurone via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Sep 13 08:27:07 PDT 2016


On Sunday, 11 September 2016 at 16:14:59 UTC, Mike Parker wrote:
> On Sunday, 11 September 2016 at 16:10:04 UTC, Mike Parker wrote:
>
>> And here, no memory is allocated. barSlice.ptr is the same as 
>> bar.ptr and barSlice.length is the same as bar.length. 
>> However, if you append a new element:
>>
>> barSlice ~= 10;
>>
>> The GC will allocate memory for a new array and barSlice will 
>> no longer point to bar. It will now have four elements.
>
> I should clarify that this holds true for all slices, not just 
> slices of static arrays. The key point is that appending to a 
> slice will only allocate if the the .capacity property of the 
> slice is 0. Slices of static arrays will always have a capacity 
> of 0. Slices of slices might not, i.e. there may be room in the 
> memory block for more elements.

Thanks for the detailed answer. I still don't get the advantage 
of passing slices into functions by value allowing modification 
to elements of the original array.  Is there an way to specify 
that a true independent copy of an array should be passed into 
the function? E.g, in c++ func(Vector<int> v) causes a copy of 
the argument to be passed in.


More information about the Digitalmars-d-learn mailing list