On Wednesday, 22 October 2014 at 15:45:02 UTC, eles wrote:
D version:

        { //displays ~A~B~C
            A foo = scoped!(A)();
            B bar = scoped!(B)();
            C caz = new C();
            destroy(caz);
        }

Why the objects are not destroyed in the inverse order of their creation? Case in point, destroying foo releases a lock for bar and caz.

`foo` should be a `Scoped!A`. When it's typed as `A`, the
`Scoped!A` that is returned by `scoped`, is destructed
immediately (and the reference leaks, I guess).

Compare:

import std.stdio;
import std.typecons;
class A {~this() {writeln("~A");}}
class B {~this() {writeln("~B");}}
class C {~this() {writeln("~C");}}
void main()
{
     {
         writeln("bad:");
         A foo = scoped!(A)();
         writeln("1");
         B bar = scoped!(B)();
         writeln("2");
     }
     {
         writeln("good:");
         auto foo = scoped!(A)();
         writeln("1");
         auto bar = scoped!(B)();
         writeln("2");
     }
}

prints:

bad:
~A
1
~B
2
good:
1
2
~B
~A

Reply via email to