DIP 1018--The Copy Constructor--Community Review Round 1
RazvanN
razvan.nitu1305 at gmail.com
Wed Dec 19 13:40:41 UTC 2018
On Wednesday, 19 December 2018 at 11:53:12 UTC, Kagamin wrote:
> I think const postblit can be done by creating shadow copy of
> instance fields (but still physically located in the field).
>
> struct A
> {
> int b;
> this(this) immutable
> {
> immutable int shadow_b; //reads go here
> //b++
> immutable int t=shadow_b;
> shadow_b.__dtor();
> b.__ctor(t+1);
> }
> }
>
> Type system would treat them as distinct instances, but would
> destroy shadow copy right before assignment, after which shadow
> copy's lifetime ends and it goes out of scope completely, which
> will also invalidate any retained pointers if any.
This makes the blitting useless. Look at it this way: the
compiler blitts the struct (in this case, `b`), then it makes
another copy of it (`immutable int t = b) solely for the purpose
of destroying the field for the former instance (!!!!!!). All
this copies become useless when using the copy constructor.
Cheers,
RazvanN
More information about the Digitalmars-d
mailing list