Class member function calls inside ctor and dtor
Johan Engelen
j at j.nl
Sat Jan 27 14:48:08 UTC 2018
I'm working on devirtualization and for that it's crucial to know
some spec details (or define them in the spec if they aren't yet).
Currently, calling non-final member functions in the destructor
is allowed and these indirect calls are to the possibly
overridden functions of derived classes. That is, inside a base
class constructor, the object's type is its final type (so
possibly of a derived class). This is the same in the destructor.
Thus, the object's dynamic type does not change during its
lifetime.
This greatly simplifies devirtualization, and I want to verify
that it is in the spec (I can't find it).
See this example program:
```
char glob;
class A {
char c;
this() { c = getType(); }
~this() { glob = getType(); }
char getType() { return 'A'; }
}
class B : A {
override char getType() { return 'B'; }
}
void main() {
{
scope b = new B();
assert(b.c == 'B');
}
assert(glob == 'B');
}
```
My question: where can I find this in the spec, and where in the
testsuite is this tested?
If it's not in the spec and/or not in the testsuite, I'll add it.
Thanks,
Johan
More information about the Digitalmars-d
mailing list