Question about dynamic arrays and slices

Ary Borenszweig ary at esperanto.org.ar
Thu Jan 30 02:43:55 PST 2014


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?


More information about the Digitalmars-d-learn mailing list