If classes with virtual functions are implemented with vtables, how is a class with no virtual functions implemented?

c++, virtual-functions

Solution

Non virtual member functions are really just a syntactic sugar as they are almost like an ordinary function but with access checking and an implicit object parameter.

struct A 
{
  void foo ();
  void bar () const;
};

is basically the same as:

struct A 
{
};

void foo (A * this);
void bar (A const * this);

The vtable is needed so that we call the right function for our specific object instance. For example, if we have:

struct A 
{
  virtual void foo ();
};

The implementation of 'foo' might approximate to something like:

void foo (A * this) {
  void (*realFoo)(A *) = lookupVtable (this->vtable, "foo");
  (realFoo)(this);   // Make the call to the most derived version of 'foo'
}

Problem

In particular, wouldn't there have to be some kind of function pointer in place anyway?

Original source