-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 bearophile wrote: > div0: >> scope x = new A("x"); >> y = new A("y"); >> x = y; > > In my opinion it's better to not reassign references of scoped objects. > In real programs where possible it's better to write boring and stupid code > :-) > > Bye, > bearophile
Yeah, I was thinking about that and wondering whether in fact it should be an error and disallowed. I use scope because I want the instance on the stack for performance, and allowing the scope ref to be reassigned buggers things up. also consider: import std.stdio; class A { string _instance; this(string instance) { _instance = instance; } ~this() { writefln("A.~this @ 0x%x: %s", cast(void*)this, _instance); } } A test() { scope x = new A("x"); auto y = new A("y"); x = y; return y; } void main() { scope z = test(); writefln("main, z @ 0x%x, [%s]", cast(void*)z, z._instance); } output: A.~this @ 0x962E40: y main, z @ 0x962E40, [y] This is clearly wrong, we are accessing a deleted object, and for some reason we aren't getting a double delete of y, which we should. - -- My enormous talent is exceeded only by my outrageous laziness. http://www.ssTk.co.uk -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iD8DBQFLrQCTT9LetA9XoXwRApiDAJ90F6qYvnWiSs5SSuCLp9RHfV8yXQCeOYCF A+zJeKRqVgnSC/JCQzxrghg= =qpxe -----END PGP SIGNATURE-----