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:
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;
}