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