GC does not delete subclass

Matthias Thurau Matthiasth at gmx.de
Mon Dec 17 13:50:12 PST 2007


Hi,
I just made some small examples for myself to understand the GC. Here i have a testcase, that has an unexpected behavior for me:



import std.stdio;

static int number   =   0;
static int number2   =   0;

class MyClass {
public:
  this()    {   writefln("Constructor %d", number);
                myNumber = number; number++;
                member  =   new My2Class(); };
  ~this()   {   writefln("Destructor %d", myNumber); };

  My2Class    member;

  int myNumber;
};

class My2Class {
public:
  this()    {   writefln("Sub_Constructor2 %d", number2);
                myNumber2 = number2; number2++; };
  ~this()   {   writefln("Sub_Destructor2 %d", myNumber2); };

  int myNumber2;
};




int main(char[][] args) {
    {
        scope MyClass A  =    new MyClass();
    }

    std.gc.fullCollect();

    writefln("The Sub Class from 0 does not get deleted yet!");

    MyClass C   =    new MyClass();

    return 0;
};



The Output ist: 

Constructor 0
Sub_Constructor2 0
Destructor 0
The Sub Class from 0 does not get deleted yet!
Constructor 1
Sub_Constructor2 1
Sub_Destructor2 1
Destructor 1
Sub_Destructor2 0



More information about the Digitalmars-d mailing list