Diffrent instance of class share static array member?
    Regan Heath 
    regan at netmail.co.nz
       
    Fri Sep 28 08:25:11 PDT 2007
    
    
  
Brian Hsu wrote:
> Hello, everybody
> 
> When I tried to program an knight problem, I use a loop to test every
> case, but only the answer of first case is correct. After print some
> variable, I suspect it is caused by static array member.
> 
> So I wrote a simplest code to test, it looks like following (full
> code is in the attachment), I found that every instance seems share
> the same array even another instance changed the elements in array.
> 
> class TestArray { int [] x = [0,0,0,0,0]; void doSomething () { //
> Increase every element in array by 1} }
> 
> void main () { for (int i = 0; i < 5; i++) { TestArray t = new
> TestArray(); t.doSomething(); // Print array. } }
> 
> I tried gdc/dmd at Linux/Windows all have same result, so I wondered
> is this a design rationale for memory space and efficiency?
Not sure.  It appears the array literal:
[0,0,0,0,0,0,0,0,0,0]
creates a single array of int's in memory and the assignment:
int[] x = [0,0,0,0,0,0,0,0,0,0];
causes the array reference 'x' to refer to that signle instance in all 
class instances.
Whereas what you actually want/expect is for the assignment to create a 
new array in memory and copy the contents of the literal.
> Currently I use add an constructor and in the constructor do x =
> x.dup in order to create an whole new dynamic array which only belong
> to specific instance, is my method correctly?
It works.
Regan
    
    
More information about the Digitalmars-d-learn
mailing list