Why is the constructor of B called?

Marc Schütz via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Sep 24 04:26:10 PDT 2015


On Thursday, 24 September 2015 at 01:01:09 UTC, Nicholas Wilson 
wrote:
> On Wednesday, 23 September 2015 at 21:25:15 UTC, tcak wrote:
>> On Wednesday, 23 September 2015 at 21:14:17 UTC, Adam D. Ruppe 
>> wrote:
>>> On Wednesday, 23 September 2015 at 21:08:37 UTC, tcak wrote:
>>>> I wouldn't expect B's constructor to be called at all unless 
>>>> "super" is used there.
>>>
>>> "If no call to constructors via this or super appear in a 
>>> constructor, and the base class has a constructor, a call to 
>>> super() is inserted at the beginning of the constructor. "
>>>
>>>
>>> from http://dlang.org/class.html#constructors
>>>
>>> the idea is to make sure the base class construction work is 
>>> done too.
>>
>> Is there any way to prevent this behaviour?
>>
>> Quickly checked whether Java acts in the same way. Answer is 
>> yes.
>
> You might be able to swap out the vtbl entry  for a stub call 
> it and trick the compiler and swap it back, but...

Urgh...

If you can modify the base class, and you really need it, you can 
check the dynamic type:

class Base {
     this() {
         if(!cast(Base) this) return;
         // do the initialization
     }
}


More information about the Digitalmars-d-learn mailing list