On Sunday, 16 April 2023 at 05:58:39 UTC, Skippy wrote:

These lines aren't necessary:

// ??
int counter;

// ??
static this()
{
    counter = test.objCnt;
}


`t1` is default-initialized, so it's null.
    test t1, t2 = new test();

Ditto for t3. Classes are reference objects, not value objects, so you must explicitly instantiate instances if you want them to be non-null.
    test t3;

The modified code:

```d
class test
{
  private:
    int objNo;
    static int objCnt;

  public:
    this()
    {
        objNo = ++objCnt;
    }

    ~this()
    {
        --objCnt;
    }

    void printObjNumber()
    {
        writefln("object number : %s", objNo);
    }

    static void printObjCount()
    {
        writefln("count: %s", objCnt);
    }
}


int main()
{
    test t1 = new test(), t2 = new test();

    test.printObjCount();

    test t3 = new test;
    test.printObjCount();

    t1.printObjNumber();
    t2.printObjNumber();
    t3.printObjNumber();

    return 0;
}
```

Reply via email to