Discussion: Rvalue refs and a Move construtor for D
Suleyman
sahmi.soulaimane at gmail.com
Thu Sep 5 19:38:57 UTC 2019
On Thursday, 5 September 2019 at 18:59:50 UTC, kinke wrote:
> Resetting the moved-from instance to T.init or something
> similar is what you'd do in the move ctor anyway (besides
> blitting the previous contents into the new instance and maybe
> doing some more adjustments), and definitely what the default
> implementation of the move ctor would do.
His initial point about the advantage of rvalue still remains
unchallenged.
Example:
```
void foo(@rvalue ref S value, int n = 0)
{
if (n > 32)
return;
foo(__move(value), n + 1);
}
struct S
{
long[10] a;
import core.stdc.stdio : puts;
this(@rvalue ref S) { puts("mc"); }
this(ref S) { puts("cc"); }
auto opAssign(@rvalue ref S) { puts("m="); }
auto opAssign(ref S) { puts("c="); }
~this() { puts("~"); }
}
void main()
{
S lvalue;
foo(__move(lvalue));
}
```
You can try this with the POC. The whole program only calls the
destructor for the lvalue, and only once. You need a competitive
alternative.
More information about the Digitalmars-d
mailing list