struct postblit not called, but still destructed

Lemonfiend lemon at fie.nd
Sun Jan 19 09:48:30 PST 2014


When a struct is passed to a function as argument, it is first 
copied and at the end destructed. But in the following code it is 
not copied, yet still destructed?

module main;

import std.stdio;

struct C
{
	A[] _objs;

	this(A[] objs...)
	{
		writeln(`  C this()`);
		_objs = objs;

		// A.this(this) is not called
		// yet A.~this IS called
	}
}

struct B
{
	A sup;
	alias sup this;

	this(A a)
	{
		writeln(count, ` B this()`);
		sup = a;
	}
}

struct A
{	
	static int count;

	this(int n)
	{
		count++;
		writeln(count, ` A this()`);
	}

	this(this)
	{
		count++;
		writeln(count, ` A this(this)`);
	}

	~this()
	{
		count--;
		writeln(count, ` A ~this()`);
	}
}

void main()
{
	A a = A(1);
	writeln(a.count == 1);

	B b = B(a);
	writeln(a.count == 2);

	C c = C(b);
	writeln(a.count == 3);
}


More information about the Digitalmars-d-learn mailing list