On 2013-02-01 16:37, Steven Schveighoffer wrote:
Actually, that's a different problem.  File is a struct, and structs do NOT have
their destructor run by the GC.  Only Objects do.

This is a GC limitation, since structs do not contain a pointer to their
typeinfo like classes do, and there is no provision for storing a pointer to the
typeinfo of a block.  It could be fixed by a more precise GC.  AIUI, we have
something like that coming, but I've been hearing that for more than a year ;)

So currently the only way to make a struct's destructor work when the struct is on the heap is to encapsulate that struct in a class?
I have tested the following:

    struct A { ... }
    class C { A a; ... }

    A a = A();       // OK
    A *b = new A();  // BAD, no finalization
    C c = new C();   // OK, a's destructor will be called

Reply via email to