I do not understand copy constructors
Paul Backus
snarwin at gmail.com
Thu Aug 12 11:32:03 UTC 2021
On Thursday, 12 August 2021 at 11:19:34 UTC, drug wrote:
> ```D
> struct A {
> int[] data;
> this(ref return scope inout A rhs) /* no inout here */ {
> data = rhs.data.dup; }
> }
> ```
> The problem is that if you qualify the ctor itself then if you
> pass const/immutable rhs to it then the ctor is const/immutable
> too (like the args) and of course you cannot modify this, so
> the error.
>
> To make a copy ctor you need to qualify copy ctor args as inout
> but the copy ctor itself shall be mutable and have no
> const,immutable or inout qualifier.
This is not true. Qualifying the ctor as `inout` works fine:
https://run.dlang.io/is/Kpzp5M
The problem in this example is that `.dup` always returns a
mutable array, even if the array being copied is `inout`. The
solution is to cast the copy back to the original type:
```d
this(ref return scope inout A rhs) inout
{
data = cast(typeof(rhs.data)) rhs.data.dup;
}
```
More information about the Digitalmars-d-learn
mailing list