On Thu, 30 Jan 2014 05:43:55 -0500, Ary Borenszweig <[email protected]> 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?

Yes, it is intrinsic on how slices and arrays work.

How can I safely pass around a dynamic array without being afraid someone will keep an old copy of the data?

You can't. Why is that important? The use case (or case that you are troubled by) would help to explain I think.

-Steve

Reply via email to