On Tuesday, 4 April 2023 at 07:08:52 UTC, Chris Katko wrote:
dscanner reports this as a warning:

```D
struct foo{
this()
  {
  /* some initial setup */
  refresh();
  }
void refresh() { /* setup some more stuff */}
// [warn] a virtual call inside a constructor may lead to unexpected results in the derived classes

}
```

Firstly, are all calls virtual in a struct/class in D? Is this any different from C++?

Regarding this warning, the big difference between C++ and D classes is that a D class object is of type Child its whole life including during the Base class constructor execution. In C++ a class object starts as Base, Base::constructor is executed, then type is changed to Child (implemented by overwriting the vtable pointer), then Child::constructor is executed.

-Johan

Reply via email to