Why is the constructor of B called?

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Sep 23 15:25:04 PDT 2015


On 09/23/2015 02:25 PM, 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?

No and I don't think it will ever be implemented. The derived class is 
supposed to be used as the super class, which involves proper 
construction of the super parts.

> Quickly checked whether Java acts in the same way. Answer is yes.

Same with C++. As discussed in the other thread, at least D allows 
changing the order in which the super constructor is executed.

Ali



More information about the Digitalmars-d-learn mailing list