Steven Schveighoffer schveiguy at
Mon Nov 15 07:48:40 PST 2010

On Sat, 13 Nov 2010 15:57:50 -0500, spir <denis.spir at> wrote:

> On Fri, 12 Nov 2010 08:03:26 -0500
> "Steven Schveighoffer" <schveiguy at> wrote:

>> Essentially, if you change your line above to:
>> this.patterns = patterns.dup;
> Works, but I don't understand why: isn't the duplicate also allocated on  
> the stack? I mean, dup is supposed to just duplicate, isn't it? what  
> does it give to the new structure that the original one hasn't? I  
> thought I would have to do for instance:
> 	ints[] x;
> 	void f(int[] ints...) {
> 	  x.length = ints.length;   // allocate new area on the heap
> 	  x[] = ints[];             // copy elements in there
> 	}

When doing this:

arr1 = arr2;

It copies the reference to the data, not the data itself.  Since the data  
is on the stack, you are still pointing at the stack

arr1 = arr2.dup;

copies the data itself, then returns a reference to the new data.  The  
reference is stored wherever the reference is stored.  In your case, the  
reference this.patterns is stored in the class, so it's also stored on the  

I hope this is clearer.


More information about the Digitalmars-d-learn mailing list