Struct delegate access corruption
tsbockman
thomas.bockman at gmail.com
Wed Feb 17 20:44:46 UTC 2021
On Wednesday, 17 February 2021 at 20:18:53 UTC, Paul Backus wrote:
> On Wednesday, 17 February 2021 at 19:42:00 UTC, tsbockman wrote:
>> A copy constructor and opAssign can be used to update pointers
>> that are relative to &this:
>> https://dlang.org/spec/struct.html#struct-copy-constructor
>
> Unfortunately this is not enough, because the compiler is free
> to implicitly move struct instances in memory any time it wants
> to. See the bug report below for more details:
>
> https://issues.dlang.org/show_bug.cgi?id=17448
>
> Until D gets move constructors, structs with interior pointers
> should be avoided.
That bug is about postblits, this(this), not copy constructors:
this(ref typeof(this)). Copy constructors were added to the
language specifically to fix those sort of problems. From the
spec:
https://dlang.org/spec/struct.html#struct-postblit
> WARNING: The postblit is considered legacy and is not
> recommended for new code. Code should use copy constructors
> defined in the previous section. For backward compatibility
> reasons, a struct that explicitly defines both a copy
> constructor and a postblit will only use the postblit for
> implicit copying. However, if the postblit is disabled, the
> copy constructor will be used. If a struct defines a copy
> constructor (user-defined or generated) and has fields that
> define postblits, a deprecation will be issued, informing that
> the postblit will have priority over the copy constructor.
However, since issue #17448 is still open I have posted a
question to the issue report asking for clarification:
https://issues.dlang.org/show_bug.cgi?id=17448#c39
More information about the Digitalmars-d-learn
mailing list