oh right,
struct A {
this(this) { copy referenced mem here}
}

or
struct A {
ref A opAssign(ref const A other) { this = other; return this; }
}

so if you have fields that should be fully copied like array this is the place to do it, otherwise there is a reference arguments, if both is no go for you then this behavior would make more trouble than benefits and thats.

so gather all up here are some little example
----

struct A
{       
        int x;
        int[] array;
        
        this(int x) { this.x = x; array ~= x; }
        this(this) { array = array.dup; }
        
        ref A opAssign(ref const A other) { this = other; return this; }
}

void main()
{
A a1 = A(1);
A a2 = A(2);
A a3 = a2;

a2.x = 5;

assert(a2.x == 5);
assert(a2.array[0] == 5);

assert(a3.x == 2);
assert(a3.array[0] == 2);

assert(a2.array.length == 1);
assert(a3.array.length == 1);

}

Reply via email to