Thread overview
Calling copyctor manually
Jun 01, 2019
SrMordred
Jun 01, 2019
Paul Backus
Jun 01, 2019
SrMordred
June 01, 2019
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'
June 01, 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
June 01, 2019
On Saturday, 1 June 2019 at 19:10:36 UTC, Paul Backus wrote:
> On Saturday, 1 June 2019 at 02:27:36 UTC, SrMordred wrote:

> void main() {
>     T a;
>     T b;
>     a.__ctor(b);
> }
> https://run.dlang.io/is/NeioBs

Thanks!
The most obvious way i didnĀ“t think :P