Question about dynamic arrays and slices
John Colvin
john.loughran.colvin at gmail.com
Thu Jan 30 04:50:33 PST 2014
On Thursday, 30 January 2014 at 10:43:55 UTC, Ary Borenszweig
wrote:
> Hi,
>
> I just read this nice article about slices:
> http://dlang.org/d-array-article.html
>
> So I tried this code to see if I understood it correctly:
>
> ---
> import std.stdio;
>
> void main() {
> auto a = new int[5];
> auto b = a;
>
> a[0] = 1;
>
> for(auto i = 0; i < 100; i++) {
> a ~= 0;
> }
>
> a[0] = 2;
>
> writefln("a[0] = %d", a[0]);
> writefln("b[0] = %d", b[0]);
> }
> ---
>
> This prints:
>
> a[0] = 2
> b[0] = 1
>
> That is, "a" was resized to a point where it needed to
> reallocate its contents. "b" still holds a reference to the old
> data. When, after the for loop, I change a's data, b's data
> doesn't change.
>
> Is this expected behaviour?
>
> How can I safely pass around a dynamic array without being
> afraid someone will keep an old copy of the data?
pass the array by ref, or make a wrapper struct that holds a
pointer to a slice, or a wrapper class that holds the slice.
Alternatively, make a wrapper struct that disallows the append
operator and always use std.array.refAppender
More information about the Digitalmars-d-learn
mailing list