Why are structs and classes so different?

forkit forkit at gmail.com
Mon May 16 01:34:03 UTC 2022


On Sunday, 15 May 2022 at 15:26:40 UTC, Kevin Bailey wrote:
> I've done some scripting in D over the years but I never dug 
> into D until recently. I'm going through Learning D and I was 
> reminded that structs and classes are so different.
>
> - struct methods are non-virtual while class methods are virtual
> - Thus, structs can't inherit, because how would you find the 
> child's destructor given a parent pointer?
> - On the stack, structs by-value but classes are by-reference
>
> I'm trying to understand why it is this way. I assume that 
> there's some benefit for designing it this way. I'm hoping that 
> it's not simply accidental, historical or easier for the 
> compiler writer.

A virtual function call has to pass through a virtual function 
look-up, and thus there is (some) overhead involved.

Thus, by design, structs avoid this overhead (completely).

It's also (I think) another reason why D does not support 
multiple inheritance. Since you would need multiple virtual 
function tables.


More information about the Digitalmars-d-learn mailing list