Calling copyctor manually
Paul Backus
snarwin at gmail.com
Sat Jun 1 19:10:36 UTC 2019
On Saturday, 1 June 2019 at 02:27:36 UTC, SrMordred wrote:
> Its possible to call copyctor manually without calling dtor?
>
> ex, what i did before:
>
> struct T{ ~this(){ writeln("DTOR"); } this(this){
> writeln("POSTBLIT"); } }
>
> T a;
> T b;
>
> memcpy(&a,&b,T.sizeof);
> a.__postblit;
>
> /*
> output:
> POSTBLIT
> DTOR
> DTOR
> */
>
> With copy ctors, not sure what to do.
>
>
> struct T{
> ~this(){ writeln("DTOR"); }
> this(ref return scope T self){ writeln("COPYCTOR"); } }
>
> T a;
> T b;
>
> memcpy(&a,&b,T.sizeof);
> a.opAssign(b); //???
> //same as a = b;
>
> /*
> output:
> COPYCTOR
> DTOR
> DTOR
> DTOR
> */
>
> I want something like '.__xcopyctor'
The copy constructor is implemented as an overload of `__ctor`:
import std.stdio;
struct T {
~this() { writeln("DTOR"); }
this(ref return scope T self) { writeln("COPYCTOR"); }
}
void main() {
T a;
T b;
a.__ctor(b);
}
/* Output:
COPYCTOR
DTOR
DTOR
*/
https://run.dlang.io/is/NeioBs
More information about the Digitalmars-d-learn
mailing list