struct Test{
        int x;
        this(int v){
                x = v;
                writeln(x.to!string ~ " Created");
        }
        ~this(){
                writeln(x.to!string ~ " Destroyed");
        }
        void opOpAssign(string op, Type)(ref Type s){
                x = s.x;
        }
}
void showme(Type)(ref Type t){
        writeln(t.x);
}
void main(){
        auto t = Test(1);
        auto t2 = Test(2);
        showme(t);
        showme(t2);
        t = t2;
}

Prints:
1 Created
2 Created
1
2
1 Destroyed
2 Destroyed
2 Destroyed

this line:
t = t2
Causes the dtor to be called.

Why?
I expected nothing to happen because "ref" its a simple pointer, right?
Or I am missing something here?

Reply via email to