Destructor nonsense on dlang.org

Tove tove at fransson.se
Thu May 24 15:49:27 PDT 2012


On Thursday, 24 May 2012 at 20:53:33 UTC, Tove wrote:
> On Thursday, 24 May 2012 at 19:46:07 UTC, foobar wrote:
>> Looks to me like an issue with separation of concerns. I think 
>> that dtors need to only provide deterministic management of 
>> resources and not affect GC algorithms:
>> 1. classes should *not* have dtors at all.
>> 2. struct values should *not* be gc managed [*].
>>
>
> Why not simply set "BlkAttr.NO_SCAN" on ourselves if we need 
> certain resources in the destructor? Assuming we one day get 
> user defined attributes, it can be make quite simple...

Tested my idea... unfortunately it's broken...

GC.collect() while the program is running, is OK... so I was 
hoping to add:
GC.disable() just before main() ends, but apparently this request 
is ignored.

i.e. back to square 1, undefined collecting order once the 
program exits.

import std.stdio;
import core.memory;

class Important
{
   this()
   {
     us ~= this;
   }
   ~this()
   {
     writeln("2");
   }

private:
   static Important[] us;
}

class CollectMe
{
   Important resource;

   this()
   {
     resource = new Important();
   }
   ~this()
   {
     writeln("1");
     clear(resource);
   }
}

void main()
{
   GC.setAttr(cast(void*)new CollectMe(), GC.BlkAttr.NO_SCAN);
   GC.collect();
   GC.disable();

   writeln("3");
}


More information about the Digitalmars-d mailing list