www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Calling copyctor manually

reply SrMordred <patric.dexheimer gmail.com> writes:
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'
May 31 2019
parent reply Paul Backus <snarwin gmail.com> writes:
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
Jun 01 2019
parent SrMordred <patric.dexheimer gmail.com> writes:
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
Jun 01 2019