opAssign for most struct assignment calls not executed

Adam D. Ruppe destructionator at gmail.com
Thu Nov 23 15:44:54 UTC 2017


On Thursday, 23 November 2017 at 15:26:03 UTC, Timoses wrote:
>     A member;
>
>     this(A a)
>     {
>         this.member = a; // specifically aiming towards this 
> assignment...


That's not assignment, that's construction.

opAssign is only called when you assign over a struct object that 
already exists. If there isn't an existing object in the variable 
already, it instead calls a constructor.

A a = A(); // construction, there is no existing a to call
A a; // construction done here...
a = x; // so this is now assignment over the existing object


Sometimes, they look the same, as in your case, but since you are 
assigning a member for the first time inside a constructor, it 
still counts as construction of the child object instead of 
assignment over an existing object.



More information about the Digitalmars-d-learn mailing list