I've already read Are inline virtual functions really a non-sense?. But I still have some doubts and found no answer there.
They say that if situation isn't ambiguous, compiler should inline the virtual function.
However:
This can happen only when the compiler has an actual object rather than a pointer or reference to an object.
So what if I have a B
class derived from an A
one (which contains a virtual void doSth()
function) and I use the B*
pointer, not the A*
:
B* b = new B;
b->doSth();
- Suppose that the
B
hasn't any child classes. It's rather obvious (on the compile time) what function should be called. So it's possible to be inlined. Is it in fact? - Suppose that the
B
has some child classes but these classes haven't its owndoSth()
function. So compiler should "know" that the only function to call isB::doSth()
. I guess it doesn't inline though?