I recently came across another problem with my program in D, found a minimal program showing it, and experimented a little with it as follows:

import std.stdio;
import std.container;
struct CS{
  char[] t;
  CS dup()const{
    CS cs;
    cs.t = this.t.dup;
    return cs;}
};
void main(){
  Array!CS cs_array = make!(Array!CS)();
  CS cs;
  cs.t = "bb".dup;
  cs_array.insertBack(cs);
  write("cs_array = ");foreach(i2;cs_array)write(i2);writeln("");
  cs.t[0] = ("a".dup)[0];//this changes cs_array!
  write("cs_array = ");foreach(i2;cs_array)write(i2);writeln("");
  cs.t = "c".dup;//but this does not
  write("cs_array = ");foreach(i2;cs_array)write(i2);writeln("");
  return;}

The first assignment to cs.t[0] changes cs_array as indicated, but the second to cs.t does not. Also if these two assignments are reversed, neither affects cs_array. What could be the explanation of this?

Kind regards

John Nixon

Reply via email to