VC ++, like GCC, does not optimize the call. built with Visual Studio 2013 in release mode with the / O 2 flag:
base->Func(); 010B12D2 mov eax,dword ptr [esi]
EDIT: Your question actually showed something very nice. esi contains this . how does smoothing this give a v-table? well, because a V-table is the first "variable" in which there is a polymorphic object. so the assembly, *this() actually calls the first function call, *(this+sizeof(void*))() calls the second function in the V table, and so on.
this is very similar to declaring your class as
class A{ VTABLE vtable;
source share