Postblit constructor

Jiyan jiyan at jiyan.info
Wed Feb 28 18:23:04 UTC 2018


Hey,
i thought i had understood postblit, but in my Code the following 
is happening (simplified):

struct C
{
this(this){/*Do sth*/}
list!C;

void opAssign(const C c)
{
  "Postlbit from C called".writeln;
  // Do sth
}
}

struct list(T)
{
node* head;
node* last;
size_t size;

struct node
{
T val;
node* next;
node* prev;

void deleteNode()
{
static if(!isPointer!T){
	static if(__traits(compiles,val.__xdtor))val.__xdtor;
}
}

void constructNodeFrom(ref const T op)
{
  static if(isPointer!T)
  {
   val = cast(T) op;
  }
  else
  {
   val.opAssign(op);
  }
}

~this(){this.erase}
  /// Methods Add, Remove, erase are implemented here ...
}

The nodes are only allocated over malloc(). So i have to take 
care of the initioalisation myself.
The problem is, that i found out by debugging, that it seems that 
when i call val.opAssign(op) in constructNodeFrom(), there isnt 
any postblit constructor called in there, the struct seems just 
to get copied by a memcpy, can that be? Or is it a bug? Shouldnt 
the postblit constructor get called there?

Greetings


More information about the Digitalmars-d-learn mailing list