I get this output:

====

----
CTor 42
DTor 0
Return A
Postblit 42
----
DTor 84
DTor 42

====

with the following code. I'm a bit confused about the Postblit. I return by ref so I thought that I get a const ref of the original A.

[code]
import std.stdio;

struct A {
public:
        int id;

        this(int id) {
                writeln("CTor ", id);

                this.id = id;
        }

        this(this) {
                writeln("Postblit ", this.id);

                this.id *= 2;
        }

        ~this() {
                writeln("DTor ", this.id);
        }
}

class B {
private:
        A _a = void;

public:
        this() {
                this._a = A(42);
        }

        ref const(A) getA() const {
                writeln("Return A");
                return this._a;
        }
}

void main() {
        writeln("----");
        B b = new B();
        A a = b.getA();
        writeln("----");
}
[/code]

Reply via email to