Do classes require explicit constructors?

Brother Bill brotherbill at mail.com
Sat Feb 14 15:42:15 UTC 2026


In Programming in D book, page 324, I've expanded this code as 
follows:

source/app.d
```
void main()
{
	auto variable1 = new MyClass(1);
	auto variable2 = new MyClass(2);

	// variable2 disassociates from new MyClass(2), where GC 
(garbage collector) can reclaim its memory
	// now both variable1 and variable2 are both referencing new 
MyClass(2)
	variable1 = variable2;

	assert(variable1 is variable2);
}

class MyClass
{
	int id;

	// this(int id)
	// {
	// 	this.id = id;
	// }
}

```

This fails to compile with message:
```
c:\temp\c54_p324_1d_assignment\source\app.d(5): Error: no 
constructor for `MyClass`
     auto variable1 = new MyClass(1);
                      ^
c:\temp\c54_p324_1d_assignment\source\app.d(6): Error: no 
constructor for `MyClass`
     auto variable2 = new MyClass(2);
```

Is this expected behavior, that is, we always need to create our 
constructors, no free constructor is built for us by the D 
compiler?

If so, this is a clear departure from C# and Eiffel, where one 
gets a free constructor if no explicitly declared constructors.


More information about the Digitalmars-d-learn mailing list